如何在#if条件检查中使用全局变量?

问题描述

#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)
  1. 预处理器测试宏定义TEST。按照定义,此检查的结果为true
  2. 现在预处理程序正在检查宏定义(不是C变量!)i是否存在。并非如此,#if中的整个表达式被求值为false

通常:

#if a

检查宏定义a是否存在,然后检查其值是否为!= 0