3

我正在开发一个开放的 gl 驱动程序,需要使用#define 定义一组常量。这些常量的名称与它们所代表的值一起迭代。它们还受另一个特定于硬件的#define 设置的最大值的限制。如果可能,我想使用最大值来定义这些常量。

目前我已将它们定义如下:

#define GL_MAX_TEXTURE_UNITS 24
#define GL_TEXTURE0  0
#define GL_TEXTURE1  1
...
#define GL_TEXTURE24 24

我想有以下几点:

#define GL_MAX_TEXTURE_UNITS 24
#define GL_TEXTURE(SOMETRICKYMACRO)

宏的定义方式使得在编译时我最终得到与第一种情况等效的扩展,但如果我想更改常量的数量,我只需要修改 GL_MAX_TEXTURE_UNITS。

4

1 回答 1

1

C 预处理器本身不能生成新的预处理指令。如果您想做这样的事情,您需要使用单独的实用程序(可能是 shell 或 awk 脚本)生成头文件,作为构建过程的一部分。

如果您发现自己确实需要这样的东西(以编程方式可变的值范围),则可能表明通过宏名称象征性地引用它们是一个糟糕的设计选择。

于 2013-10-09T00:35:55.180 回答