【问题标题】:Adding zero in c preprocessor statement在 c 预处理器语句中添加零
【发布时间】:2013-12-07 23:33:52
【问题描述】:

在查看一些 c 头文件(特别是 stdarg.h)时,我注意到一个非常奇特的行:

#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L

奇怪的是+ 0。零是加法恒等式;它是写作noop 的各种数学之一。

在上述预处理器语句中添加零有什么目的?我知道那里有all sorts of weird preprocessor magic,但这看起来很荒谬。

【问题讨论】:

    标签: c c-preprocessor zero addition


    【解决方案1】:

    如果__STDC_VERSION__ 被定义为 空令牌(例如#define __STDC_VERSION__)。

    (感谢 Jens Gustedt 指出我的答案的第一个版本是错误的。)

    【讨论】:

    • 不完全正确。预处理器评估的规则将未知标识符标记评估为 0,因此如果未定义它就可以了。重要的情况是何时定义它,但定义为空令牌。
    • @JensGustedt:你是对的,我只是试图在一些测试代码中验证我的答案,发现它不正确。我希望它现在是正确的。
    • 扭曲。我猜如果标记为空白,+ 号只会被解释为一元运算符。
    • @ValekHalfHeart:是的,没错。
    猜你喜欢
    • 2016-04-09
    • 2010-09-22
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多