gpt4 book ai didi

C - 如何为 C header 中的类型设置默认值

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:22 24 4
gpt4 key购买 nike

我有一些来自 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com