c - 未分配的 #defines 是否隐式分配为 0?

标签 c

我遇到了一些编译开关,有一件事情让我感到惊讶。我无法理解为什么即使定义的值是纯粹的垃圾,代码也会编译。

看起来像#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)

比较两个宏值pureGarbageff,并执行主体

#define testVar 1

如果它们相同。由于您没有同时设置 pureGarbageff 宏,因此它们两者都被视为,因此条件有效是

#if (0 == 0)

这是非常正确的,因此主体被执行并且testVar被定义为1

第一行

#define variable pureGarbage|0xff

在这里不起任何作用。

关于c - 未分配的 #defines 是否隐式分配为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657107/

相关文章:

c - MinGW 的 msvcrt 替代品? (例如,获得符合要求的 snprintf)

c - 标准流管道测试失败

c - 前进到指针数组的开始

c++ - 访问硬编码数组和运行时初始化数组之间是否存在任何性能差异?

c++ - 声明为 volatile 的 InterlockedIncrement 参数有什么影响

C - 将多个指针作为参数传递给 pthread_create

c - Widechar 排序并从文件加载

c - 从 asm volatile 调用内部访问静态 C 变量

c - 打印图表时无限循环

c - 函数 SpacePlug 将一个指向字符串的指针和另一个字符作为参数。