我有一些来自C++背景的标题,它使用许多预先标记的"默认值"来声明类型.例如
// 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};
Run Code Online (Sandbox Code Playgroud)
...
// Source file.
RGBColor aColor = kRGB_White;
Run Code Online (Sandbox Code Playgroud)
问:出于兼容性原因,我需要将这些标头转换为C. 有没有办法为C头重新创建这些默认值,最好不要更改数据结构本身?
谢谢.
要防止出现重复全局定义问题,您需要将const标题中结构的声明更改为:
extern const RGBColor kRGB_White;
extern const RGBColor kRGB_Black;
Run Code Online (Sandbox Code Playgroud)
并将定义放在一个链接的.c文件中.
另一种方法是将const结构更改为静态,这样当它们最终出现在几个不同的模块中时不会受到影响:
static const RGBColor kRGB_White = {1.0f, 1.0f, 1.0f};
static const RGBColor kRGB_Black = {0.0f, 0.0f, 0.0f};
Run Code Online (Sandbox Code Playgroud)
这可能会导致对象在最终链接图像中出现不止一次,但今天的链接器可能足够聪明,可以摆脱重复(我认为 - 如果您正在执行此操作的结构,则某些测试可能是有序的)大和/或众多).
如果您担心使用consts初始化其他变量,请执行以下操作:
RGBColor aColor = kRGB_White;
Run Code Online (Sandbox Code Playgroud)
在C中很好(程序员认为C由于某种原因不允许这样做似乎相对常见 - 也许在预标准C中并不总是允许它?).
| 归档时间: |
|
| 查看次数: |
1399 次 |
| 最近记录: |