包含特殊字符的有效标识符 - C编程

时间:2018-06-11 00:58:39

标签: c identifier

是否有人能够解释为什么_variable$2是有效的C编程标识符?

基于ISO documentation以及一些在线支持(可靠)来源,我认为只允许使用字母,数字和_(下划线)字符。

但是_variable$2之类的变量名称完全有效,并且在编译和测试时正常运行。如果是这种情况,其他特殊字符可以和不能同样使用吗?这仅限于字符,还是可以将表情符号替换为C编程语言中的有效标识符名称?任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:2)

  

有人能够解释原因:' _variable $ 2'是一个有效的C编程标识符?

从某种意义上说,严格符合C程序不能使用包含' $'字符。

  

我认为只有字母,数字和' _' (下划线)字符是允许的。

C标识符中只允许使用下划线,十进制数字,非重音大写和小写字母以及通用字符名称​​ required (通用字符名称在C11中是新的)。但是,该标准明确允许实现定义它们接受的其他字符。

  

但变量名称如' _variable $ 2'完全有效并在编译和测试时正常运行。

一个实现接受这样的标识符并不能使它们完全有效"。它只是使它们在该实现中有效。

  

如果是这种情况,其他特殊字符可以和不能同样使用吗?这仅限于字符,还是可以将表情符号替换为C编程语言中的有效标识符名称?

该标准指定标识符中接受的其他字符列表是实现定义。这在标准中具有特定含义:符合要求的实现必须记录他们对所有实现定义的特征的选择。因此,如果您愿意依赖某些选定实施的特定特征,那么您应该在其文档中找到该实现允许的额外字符的列表或描述。

另一方面,如果您希望程序在多个不同的C实现中保持不变,那么您应该只使用字母,数字和下划线,以及标识符中的通用字符名称。

并且不要太快忽略这些通用字符名称:在表情符号(和许多其他字符)由Unicode编码的范围内,您可以使用UCN将它们包含在您的标识符中,至少在逻辑意义上的,只要你满足于依赖C11。

答案 1 :(得分:0)

当前的C标准ISO / IEC 9899:2011定义了允许在6.4.2节中用于标识符的字符集。他们在那里添加了其中一个非常不舒服的句子:

  

其他实现定义的字符

所以,理论上,(几乎)只要标识符从名为identifier-nondigit的组中的一个字符开始,其中包含字母az,大写和小写以及下划线,一切都会开始。