是否有人能够解释为什么_variable$2
是有效的C编程标识符?
基于ISO documentation以及一些在线支持(可靠)来源,我认为只允许使用字母,数字和_
(下划线)字符。
但是_variable$2
之类的变量名称完全有效,并且在编译和测试时正常运行。如果是这种情况,其他特殊字符可以和不能同样使用吗?这仅限于字符,还是可以将表情符号替换为C编程语言中的有效标识符名称?任何帮助将不胜感激:)
答案 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,大写和小写以及下划线,一切都会开始。