C99是否允许在标识符中使用通用字符名称?

3

来自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标准还是我的推理失误?
1个回答

7

以上三种情况都不是。这只是一个长期未实现(或者说只有部分实现)的功能。最近已经完成,并将在GCC 5中提供。在该版本之前,您可以使用-fextended-identifiers命令行选项,但某些情况下它会出错,从而导致默认情况下它不能启用。

您可以在GCC中C99功能的状态中查看此列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接