根据C 11(及更高版本),此代码有效:
#if 1.0 > 2.0 ? 1 : 0
#endif
但是,大多数(如果不是全部)C编译器都拒绝它:
$ echo "#if 1.0 > 2.0 ? 1 : 0" | g++ -xc++ - -std=c++11 -pedantic -c
<stdin>:1:5: error: floating constant in preprocessor expression
<stdin>:1:11: error: floating constant in preprocessor expression
N4849有这个(强调补充):
控制条件包含的表达式应该是一个完整的常量表达式,除了标识符(包括那些在词法上与关键字相同的标识符)被解释为如下所述143,并且它可以包含零个或多个定义的宏表达式和/或has-include-表达式和/或has-属性-表达式作为一元操作符表达式。
还有这个(强调添加):
整型常量表达式是整型或无作用域枚举类型的表达式,隐式转换为正则表达式,其中转换后的表达式是核心常量表达式。
的<代码>1.0
那么,C标准禁止在控制条件包含的表达式中使用浮点文字(例如)吗?
理查德·史密斯的回答:
这是标准措辞中的一个错误。有关详细信息和建议的修复,请参见http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1436——尽管众所周知该修复也是错误的(它允许lambda表达式)。