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

Valid Identifiers containing Special Characters - C Programming

有人能解释为什么 _variable 是有效的 C 编程标识符吗?

根据 ISO documentation 以及许多在线支持(可信)来源,我认为只允许使用字母、数字和 _(下划线)字符。

然而,_variable 等变量名在编译和测试时是完全有效的,运行 是正常的。如果是这种情况,还有哪些其他特殊字符可以和不能类似地使用?这仅限于简单的字符,还是可以将表情符号替换为 C 编程语言中的有效标识符名称?任何帮助将不胜感激:)

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

other implementation-defined characters

因此,理论上,只要标识符以名为 identifier-nondigit 的组中的一个字符开头,其中包含字母 a-z(大写和小写)以及下划线,(几乎)一切都会发生。

Is someone able to explain why: '_variable' is a valid C programming identifier?

从某种意义上说,严格遵守的 C 程序不能使用包含“$”字符的标识符。

I thought that only letters, digits and the '_' (underscore) characters were allowed.

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

However variable names such as '_variable' are completely valid and run as normal when compiled and tested.

接受此类标识符的一种实现并不能使它们成为 "completely valid"。它只是使它们在该实现中有效。

And if this is the case, what other special characters can and cannot be used similarly? Is this limited to simply characters or could even emoji's be substituted into valid identifier names within the C programming language?

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

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

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