提问者:小点点

条件包含:积分常数表达式是无限的?


根据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标准禁止在控制条件包含的表达式中使用浮点文字(例如)吗?


共1个答案

匿名用户

理查德·史密斯的回答:

这是标准措辞中的一个错误。有关详细信息和建议的修复,请参见http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1436——尽管众所周知该修复也是错误的(它允许lambda表达式)。