我遇到了一些编译开关,有一件事情让我感到惊讶。我无法理解为什么即使定义的值是纯粹的垃圾,代码也会编译。
看起来像#if
自动分配 #define
值设置为 0 并且不会触发任何错误,而 if
声明没有。
#define variable pureGarbage|0xff
#if (variable == 0xff)
#define testVar 1
#endif
int main()
{
printf("%d", testVar)
return 0;
}
你猜怎么着?有用。有人可以用米斯拉标准确认这一点吗?这是默认行为吗?
最佳答案
这部分
#if (pureGarbage == ff)
比较两个宏值pureGarbage
和ff
,并执行主体
#define testVar 1
如果它们相同。由于您没有同时设置 pureGarbage
和 ff
宏,因此它们两者都被视为零,因此条件有效是
#if (0 == 0)
这是非常正确的,因此主体被执行并且testVar
被定义为1
。
第一行
#define variable pureGarbage|0xff
在这里不起任何作用。
关于c - 未分配的 #defines 是否隐式分配为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657107/