如果你想切入正题,请跳到最后两段。如果您对我的困境以及我为解决它所采取的步骤感兴趣,请继续阅读下面的内容。
作为实习的一部分,我目前正在开发 C 库的一部分。所以很自然,有些代码部分不应该被用户访问,而其他部分应该是。我基本上正在开发几个架构优化的随机数生成器 (RNG)(均匀、高斯和指数分布数)。后两个 RNG 依赖于 uniform generator ,它位于不同的内核(项目)中。所以,如果用户想要使用多个 RNG,我想确保我不会不必要地复制代码,因为我们受到内存的限制(在不同的地址多次定义相同的函数是没有意义的代码段)。
现在问题出现了。库中所有其他内核的约定是我们有两个头文件和两个 C 文件(每个用于自然 C 实现和优化的 C 版本(可能使用一些内在函数和汇编和/或有一些限制)使其更快更好地适应我们的架构)。紧随其后的是另一个 C 文件(测试平台),我们的 main 函数位于该文件中,它测试两个实现并比较结果。话虽如此,我们不能真正添加额外的头文件私有或受保护的项目,我们也不能为所有这些生成器添加全局头文件。
为了克服这个限制,我在 C 文件中使用了extern函数和extern const int,它们依赖于统一的 RNG 而不是每个 C 文件顶部的#define,以使代码更易于移植和修改一个地方。这在大多数情况下都有效。
然而,棘手的一点是我们在这些内核中使用了内部类型(用户不应该看到,也不应该放在头文件中)。同样,为了可移植性,我希望能够在一个地方而不是在多个内核中的多个地方更改此typedef的定义,因为该库以后可能会用于另一个平台,并且对于算法的工作而言,至关重要的是我使用 32 位类型。
所以基本上我想知道是否有任何方法可以让typedef在 C 中“受保护”。也就是说,我需要它在所有需要它的 C 文件中可见,但对用户不可见。它可以在其中一个头文件中,但对于将在他/她的项目中包含该头文件的用户,无论它可能是什么,都不能看到它。
=============================编辑===================== ===========
我还应该注意我使用的 typedef 是一个无符号整数。所以
typedef unsigned int myType
不涉及结构。
============================超级编辑==================== ======
也禁止使用 stdint.h :(