【发布时间】:2015-01-20 05:00:47
【问题描述】:
来自 C99 规范的 WG14/N1124 草案的 §6.4.2,“标识符”:
identifier: identifier-nondigit identifier identifier-nondigit identifier digit identifier-nondigit: nondigit universal-character-name other implementation-defined characters
以及第 6.4.3 节,“通用字符名称”:
universal-character-name: \u hex-quad \U hex-quad hex-quad
这似乎表明像foo\u00AAbar 这样的标识符根据语法是有效的。我在语义中找不到任何其他暗示的东西。然而 GCC 拒绝了这样的标识符,甚至没有尝试解析它:
<stdin>:2: error: stray ‘\’ in program
<stdin>:2: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘u00AAbar’
<stdin>:2: error: ‘u00AAbar’ undeclared (first use in this function)
这是对 GCC、C99 标准的疏忽还是我的推理?
【问题讨论】:
标签: c language-lawyer c99