在开发过程中遇到个很奇怪的问题。直接上代码
cs
#include <stdio.h>
enum Mode
{
A = 0,
B = 1,
};
#define MODE B
int main()
{
#if A == MODE
printf("A\r\n");
#elif B == MODE
printf("B\r\n");
#endif
return 0;
}
在这里我期待的是得到
cs
B
但是实际上输出是
cs
A
这里#if #elif #endif 条件编译执行的结果不正确。
这是因为宏定义是预编译阶段 ,而枚举是编译阶段。宏定义的预编译早于枚举的编译。所以不能使用枚举给宏定义定义。
修改成下面代码即可
cs
#include <stdio.h>
#define A 0
#define B 1
#define MODE B
int main()
{
#if A == MODE
printf("A\r\n");
#elif B == MODE
printf("B\r\n");
#endif
return 0;
}