C 中双下划线的使用 [关闭]

2023-12-06

我刚刚在学习C programming a modern approach书。我在里面发现了一个问题:

为什么标识符包含多个相邻下划线不是一个好主意(例如在 current__balance 中)?

谁能向我解释为什么会这样?


以两个下划线或一个下划线和一个大写字母开头的标识符由 C 标准保留,不应在您自己的代码中使用,参见ISO 9899:2011 §7.1.3 ¶1 #1:

7.1.3 保留标识符

1 每个标头声明或定义其关联子条款中列出的所有标识符,并可选择声明或定义其关联的未来库方向子条款中列出的标识符以及始终保留用于任何用途或用作文件范围标识符的标识符。

  • 所有以下划线开头的标识符以及大写字母或另一个下划线始终保留以供任何使用。
  • 所有以下划线开头的标识符始终保留用作普通名称空间和标记名称空间中文件范围的标识符。
  • 如果包含任何相关的头文件,则以下任何子条款(包括未来的库方向)中的每个宏名称都保留按指定使用;除非另有明确说明(见 7.1.4)。
  • All identifiers with external linkage in any of the following subclauses (including the future library directions) and errno are always reserved for use as identifiers with external linkage.184)
  • 以下任何子条款(包括未来的库方向)中列出的每个具有文件范围的标识符都被保留用作宏名称,并且如果包含其任何关联的标头,则可用作同一名称空间中具有文件范围的标识符。

2 没有保留其他标识符。如果程序在保留标识符的上下文中声明或定义标识符(7.1.4 允许的除外),或者将保留标识符定义为宏名称,则行为未定义。

3 如果程序删除(使用#undef) 上面列出的第一组中标识符的任何宏定义,其行为是未定义的。


184) 具有外部链接的保留标识符列表包括math_errhandling, setjm, va_copy, and va_end.

对于名称中的双下划线:在许多字体中,很难将其与单下划线区分开来,并导致混乱。我建议您避免这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中双下划线的使用 [关闭] 的相关文章

随机推荐