微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在#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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。