gez*_*eza 23 c++ syntax integer literals language-lawyer
看看这段代码:
int a = 0xe+1;
Run Code Online (Sandbox Code Playgroud)
Clang,gcc,icc不编译这个:
t.cpp:1:12: error: invalid suffix '+' on integer constant
Run Code Online (Sandbox Code Playgroud)
MSVC成功编译.
哪个编译器正确?如果clang和gcc是正确的,为什么会发生这种情况?
注意:如果我之前添加空格+,代码将编译.如果我换0xe到0xf,它也会编译.也许这必须用指数表示法(比如1.2e+3)做一些事情?
use*_*ica 15
0xe+1被视为单个"预处理号"预处理令牌.这种标记化规则与普通语法中的数字文字的定义并不完全一致; 预处理数字定义为
pp-number:
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number ' digit
pp-number ' nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .
Run Code Online (Sandbox Code Playgroud)
如果标记化规则基于数字文字定义而不是更简单的"预处理数字"定义,则表达式将被标记为0xe + 1,但由于规则不匹配,您将获得单个0xe+1标记,这不是有效的文字.
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |