我想声明一个静态分配的数组。 让我们看一下下面的代码:
#define MAX(a,b) ((a)>(b)?(a):(b))
#define FAST 16
#define SLOW 6
#define MAX_NUM MAX(FAST,SLOW)
U8* pBuffers[MAX_NUM];
当 GCC 编译器评估 MAX_NUM 时(FAST 和 SLOW 是常量)? 我想确保 MAX_NUM 是常量并且作为编译的一部分或由预处理器进行评估。
最佳答案
启动编译器时,将(顺序)执行以下阶段:
- 预处理:它管理#define、#ifdef/#endif ...
- 代码生成:它生成可在 objective-c PU 上运行的机器代码
- 优化:它根据用户选项进行优化
在预处理阶段,预处理器将例如“替换”您的行:
U8* pBuffers[MAX(FAST,SLOW)]
然后:
U8* pBuffers[((FAST)>(SLOW)?(FAST):(SLOW))]
然后最后:
U8* pBuffers[((16)>(6)?(16):(6))]
的确,预处理器不是很聪明,没有更进一步。
在代码生成阶段,您的行将被解释为:
U8* pBuffers[16]
因为代码生成器非常聪明。
关于C 宏观评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51766100/