【发布时间】:2018-03-28 20:22:17
【问题描述】:
看这段代码sn-p:
int a = 0xe+1;
Clang、gcc、icc 不要编译这个:
t.cpp:1:12: error: invalid suffix '+' on integer constant
MSVC 成功编译。
哪个编译器是正确的?如果 clang 和 gcc 都是正确的,为什么会这样?
注意:如果我在+ 之前添加一个空格,则代码会编译。如果我将0xe 更改为0xf,它也会编译。也许这与指数符号有关(例如1.2e+3)?
【问题讨论】:
-
如果你的意思是
0xe + 1,我相信你必须在+之前放一个空格。 -
@user2357112 这是 OP 可能想要的,但这不是编译器实际解析它的方式
-
@RemyLebeau 但十六进制浮点文字的指数表示法是
p,而不是e。 -
@Justin:看起来预处理编号的东西回答了它:预处理器标记化规则有点奇怪,与正常语法不太一致。
-
This note 似乎很相关。
标签: c++ syntax integer language-lawyer literals