问题描述
#define TEST
int i = 1;
int main(int argc,char const *argv[]) {
#if (defined(TEST) && i)
printf("it is printed");
#endif
return 0;
}
我必须为i
创建另一个宏吗?
解决方法
如果仅当宏和全局变量上的条件都为true时,如果要输出,则执行以下操作:
#if (defined(TEST))
if (i)
{ printf("it is printed");
}
#endif
原因(同意Barmar的评论):
,预处理器指令在编译时评估,变量当时不可用。
如注释中所述,宏定义在实际C代码编译之前的预处理阶段进行扩展。
但是为什么要编译此代码,其结果将是什么。
#if (defined(TEST) && i)
- 预处理器测试宏定义
TEST
。按照定义,此检查的结果为true
- 现在预处理程序正在检查宏定义(不是C变量!)
i
是否存在。并非如此,#if
中的整个表达式被求值为false
。
通常:
#if a
检查宏定义a
是否存在,然后检查其值是否为!= 0
,