我有一些来自 C++ 背景的 header ,这些 header 对声明的类型使用许多预烘焙的“默认值”。例如
// Header.
typedef struct
{
float red;
float green;
float blue;
} RGBColor;
// Defaults.
const RGBColor kRGB_White = {1.0f, 1.0f, 1.0f};
const RGBColor kRGB_Black = {0.0f, 0.0f, 0.0f};
...
// Source file.
RGBColor aColor = kRGB_White;
问。出于兼容性原因,我需要将这些 header 转换为 C。有没有办法为 C header 重新创建这些默认值,最好不要更改数据结构本身?
谢谢。
最佳答案
为了防止重复的全局定义出现问题,您需要将 header 中的 const
结构声明更改为:
extern const RGBColor kRGB_White;
extern const RGBColor kRGB_Black;
并将定义放在一个被链接的 .c 文件中。
另一种方法是将 const
结构更改为静态的,这样当它们最终出现在几个不同的模块中时也不会受到伤害:
static const RGBColor kRGB_White = {1.0f, 1.0f, 1.0f};
static const RGBColor kRGB_Black = {0.0f, 0.0f, 0.0f};
这可能会导致对象在最终链接图像中出现不止一次,但今天的链接器可能足够聪明,可以去除重复项(我认为 - 如果您正在执行的结构,则可能需要进行一些测试这有很大和/或很多)。
如果你担心使用 consts 来初始化其他变量,这个:
RGBColor aColor = kRGB_White;
在 C 中很好(程序员认为 C 出于某种原因不允许这样做似乎相对普遍 - 也许在准标准 C 中并不总是允许这样做?)。
关于C - 如何为 C header 中的类型设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4611687/