我想声明一个静态分配的数组。
让我们看看下面的代码:

#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。。。
代码生成:它生成在目标CPU上可运行的机器代码
优化:它根据用户选项进行优化
在预处理阶段,预处理器将例如用以下内容“替换”您的行:

U8*   pBuffers[MAX(FAST,SLOW)]

然后:
U8*   pBuffers[((FAST)>(SLOW)?(FAST):(SLOW))]

最后:
U8*   pBuffers[((16)>(6)?(16):(6))]

事实上,预处理器不是很聪明,也不进一步。
在代码生成阶段,您的行将被解释为:
U8*   pBuffers[16]

因为代码生成器非常聪明。

关于c - C MACRO评估,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51766100/

10-11 21:27