根据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标准或我的推理的疏忽吗?
答案 0 :(得分:7)
这三者中没有一个。它只是一个长期未实现的(或者更确切地说,仅部分实现的)功能。它最近已经完成,并将在GCC 5中提供。在该版本之前,您可以使用-fextended-identifiers
命令行选项,但在某些情况下它出错导致它没有默认情况下启用。
您可以在Status of C99 features in GCC上找到此列表。