Fra*_*til 3 c c99 language-lawyer
根据C99规范WG14/N1124草案§6.4.2,"标识符":
Run Code Online (Sandbox Code Playgroud)identifier: identifier-nondigit identifier identifier-nondigit identifier digit identifier-nondigit: nondigit universal-character-name other implementation-defined characters
§6.4.3,"通用字符名称":
Run Code Online (Sandbox Code Playgroud)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)
Run Code Online (Sandbox Code Playgroud)
这是对GCC,C99标准或我的推理的疏忽吗?
小智 7
这三个都不是.它只是一个长期未实现的(或者更确切地说,仅部分实现的)功能.它最近已经完成,并将在GCC 5中提供.在该版本之前,您可以使用-fextended-identifiers命令行选项,但在某些情况下它出错导致它默认情况下未启用.
您可以在GCC中的C99功能状态中看到此列表.