有人能解释一下为什么_variable$2
是一个有效的C编程标识符吗?
根据ISO documentation以及一些在线支持(可信的)来源,我认为只有字母,数字和_
(下划线)字符是允许的。
但是,像_variable$2
这样的变量名是完全有效的,并且在编译和测试时可以正常运行。如果是这样的话,还有哪些特殊字符可以使用,也不可以使用?这是否仅限于字符,或者甚至可以将表情符号替换为C编程语言中有效的标识符名称?如有任何帮助,我们将不胜感激:)
发布于 2018-06-11 09:27:22
能够解释为什么:'_variable$2‘是一个有效的C编程标识符?
从严格遵循的C程序不能使用包含'$‘字符的标识符的意义上讲,它不是。
我认为只有字母、数字和'_‘(下划线)字符是允许的。
C标识符中只允许使用下划线、十进制数字、无重音的大小写字母和通用字符名称(通用字符名称是C11中的新增字符名称)。但是,该标准明确允许实现定义它们也接受的其他字符。
但是,像'_variable$2‘这样的变量名是完全有效的,并且在编译和测试时可以正常运行。
一个实现接受这样的标识符并不能使它们“完全有效”。它只是使它们在该实现中有效。
,如果是这样的话,还有哪些特殊字符可以使用,或者不可以使用?这是否仅限于字符,或者甚至可以将表情符号替换为C编程语言中有效的标识符名称?
该标准规定,标识符中接受的附加字符列表是由实现定义的。这在标准中有一个特定的含义:一致性实现必须为其对所有实现定义的特征的选择提供文档。因此,如果您愿意依赖于所选实现的特定特征,那么您应该在其文档中找到该实现所允许的额外字符的列表或描述。
另一方面,如果您希望您的程序在多个不同的C实现中不变地工作,那么您应该坚持只使用字母、数字和下划线,或者在标识符中使用通用字符名称。
不要太快忽略那些通用的字符名称:只要表情符号(和许多其他字符)是用Unicode编码的,那么您可以使用UCNs将它们包括在您的标识符中,至少在逻辑意义上是这样,前提是您满足于依赖C11。
发布于 2018-06-11 09:24:33
当前的C标准ISO/IEC 9899:2011定义了第6.4.2节中允许在标识符中使用的字符集。在那里,他们添加了一句非常不舒服的句子:
其他实现定义的字符
因此,在理论上,只要标识符以名为identifier-nondigit
的组中的一个字符开始,该组包含字母a-z,大小写和下划线,(几乎)所有内容都会运行。
https://stackoverflow.com/questions/50789342
复制相似问题