在C(和其他语言)中,对变量和函数的名称使用前缀和后缀是很常见的。特别是,人们偶尔会看到在“适当”标识符之前或之后使用下划线,例如_x
和_y
变量或_print
等。但是,避免以下划线开头的名称也是一种普遍的智慧,以避免与C标准库实现发生冲突。
那么,在哪里和哪里可以使用下划线呢?
发布于 2021-09-07 00:29:48
C标准,图书馆一章,保留某些标识符(重点是地雷):
C17 7.1.3保留标识符
-所有以下划线和大写字母或下划线开头的标识符总是保留给任何用途。 -以下划线开头的所有标识符始终保留为在普通和标记名称空间中都具有文件范围的标识符。 -以下任何一款中的每一个宏名称(包括未来的库指示)都保留给指定的使用,如果包含任何相关的标头;除非另有明确说明(见7.1.4)。 -下列任何一款(包括今后的图书馆指示)和errno中具有外部链接的所有标识符始终保留作为外部链接的标识符使用。 -在下列任何一个子子句(包括未来的库指示)中列出文件范围的每个标识符都保留为宏名称,如果包含任何相关的标头,则保留为在同名空间中具有文件范围的标识符。
其中“保留给任何使用”意味着为编译器/标准库保留,请参见“保留任何用途”的意思是什么?“为实现保留”也意味着为编译器/标准库保留。
此外,未来图书馆指南C17.31保留了许多标识符--这是一个很大的章节,我只引用最值得注意的部分:
7.31.10以int或uint开头、以_t结尾的整数类型_t可以添加到头中定义的类型中。宏名以INT或UINT开头,以_MAX、_MIN或_C结尾,可以添加到标头中定义的宏中。 7.31.12通用公用事业 以str开头的函数名和小写字母可以添加到头中的声明中。 7.31.13字符串处理 以str、mem或wcs开头的函数名和小写字母可以添加到头中的声明中。
要直接回答你的问题:
那么,在哪里和哪里可以使用下划线呢?
严格地说,哪里都没有。您不应该声明以下划线开头的标识符,因为它们可能与标准库或语言关键字等发生冲突。尽管如上面粗体文本所暗示的那样,您可以在本地命名空间中使用一个下划线,后面跟着小写。
https://stackoverflow.com/questions/69084726
复制