【问题标题】:Are unassigned #defines implicitly assigned to 0? [duplicate]未分配的#defines 是否隐式分配为 0? [复制]
【发布时间】:2019-08-26 11:31:04
【问题描述】:

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

似乎#if 自动将#define 的值分配为0 并且不会触发任何错误,而if 语句则不会。

#define variable pureGarbage|0xff
#if (variable == 0xff)
#define testVar 1
#endif


int main()
{
    printf("%d", testVar)
    return 0;
}

你猜怎么着?有用。有人可以用misra标准确认这一点吗?这是默认行为吗?

【问题讨论】:

    标签: c


    【解决方案1】:

    这部分

    #if (pureGarbage == ff)
    

    比较两个宏值pureGarbageff,并执行body

    #define testVar 1
    

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

    #if (0 == 0)
    

    这很简单,因此主体被执行,testVar 被定义为1

    第一行

    #define variable pureGarbage|0xff
    

    在这里没有任何作用。

    【讨论】:

    • 对不起,我编辑了代码。请你再回答一次好吗?谢谢!
    • 我的问题是为什么 pureGarbage 被视为 0?变量得到 0|0xff
    • 同理:常量表达式中使用的未定义的宏名求值为0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2013-04-01
    • 2020-11-24
    相关资源
    最近更新 更多