如何解决如何在#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)
- 预处理器测试宏定义
TEST
。按照定义,此检查的结果为true
- 现在预处理程序正在检查宏定义(不是C变量!)
i
是否存在。并非如此,#if
中的整个表达式被求值为false
。
通常:
#if a
检查宏定义a
是否存在,然后检查其值是否为!= 0
,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。