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

标签 c header types

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

相关文章:

c - C 中 mktime 的不一致结果

c - 未定义在另一个预处理器指令中使用的预处理器指令

java - 使用正确的数字数据类型

c++ - 如何在 C++ 中存储带单位的数字数据?

arrays - Delphi:Char 和 TCharArray 数组 "Incompatible Types"

c - 使用 write() 从整数数组中写入元素

c - 一些指针澄清

c++ - C/C++ : Write and Read Sockets

php - php 提供下载后刷新

c++ - 在 ";"之前缺少 'namespace',在 ";"之前缺少 'using'