在c预处理器语句中添加零

App*_*ish 7 c addition zero c-preprocessor

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

#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
Run Code Online (Sandbox Code Playgroud)

奇怪的部分是+ 0.零是附加的身份; 这是各种数学写作之一noop.

在上面的预处理器语句中添加零的目的是什么?我知道那里有各种奇怪的预处理器魔法,但这看起来很荒谬.

Mar*_*n R 12

如果__STDC_VERSION__定义为空令牌(例如,带有#define __STDC_VERSION__),则可以避免预处理器语法错误.

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