在c预处理器语句中添加零
在查看一些c头文件(特别是stdarg.h
)时,我注意到一条非常特殊的线:
#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
奇怪的部分是+ 0
。 零是附加的身份; 这是写noop
的各种数学之一。
在上面的预处理器语句中添加零的目的是什么? 我知道那里有各种奇怪的预处理器魔法 ,但这看起来很荒谬。
如果将__STDC_VERSION__
定义为空令牌(例如使用#define __STDC_VERSION__
),则可以避免预处理器语法错误。
(感谢Jens Gustedt指出我的答案的第一个版本是错误的。)