我意识到这可能是一个偏好问题,但我注意到我见过的很多代码示例中的变量名都有g_
前缀,s_
,{{1或者只是m_
。这是一种普遍接受的做法,这些前缀是什么意思?还有其他人会很高兴知道吗?
答案 0 :(得分:9)
g_
是一个全局变量s_
是静态的m_
是成员(实例变量)_
是会员,或者更具体地说是私人会员(两个用户都会出现)这很常见,许多开发人员都知道它,虽然它(据我所知)并不被普遍接受。我不认为你错过任何其他人。
更新:整合以下评论以提高可见度
_
也可用于表示局部变量(这个实际上不是“标准”)k
可用于表示常量答案 1 :(得分:8)
谨防领先的下划线; C标准保留以下划线和各种其他组合开头的名称。 ISO / IEC 9899:1999(又名C99标准)说:
§7.1.3保留标识符
每个标头声明或定义其相关子条款中列出的所有标识符,以及 可选地声明或定义其关联的未来库方向中列出的标识符 子条款和标识符,它们总是保留用于任何用途或用作文件 范围标识符。
- 所有以下划线和大写字母或其他字母开头的标识符 下划线总是保留用于任何用途。
- 所有以下划线开头的标识符始终保留用作标识符 在普通名称和标签名称空间中都有文件范围。
- 以下任何子条款中的每个宏名称(包括未来的库 如果包含任何相关标题,则保留指定用途; 除非另有明确说明(见7.1.4)。
- 以下任何子条款中包含外部链接的所有标识符(包括 未来的图书馆方向)始终保留用作外部标识符 键。 154)
- 具有文件范围的每个标识符在以下任何子条款中列出(包括 未来的图书馆方向)保留用作宏名称和标识符 如果包含任何相关标头,则文件范围在同一名称空间中。
不保留其他标识符。如果程序声明或定义了一个标识符 保留的上下文(7.1.4允许的除外),或定义保留的上下文 标识符作为宏名称,行为未定义。
154)具有外部链接的保留标识符列表包括errno,math_errhandling, setjmp和va_end。
规则很复杂,以至于更容易使用:
还要注意使用“_t
”后缀作为类型名称,尤其是在POSIX环境中。实际上,链接页面上的规则比C99标准中的规则更广泛,但有一行说“ ANY HEADER 后缀'_t
'”。这意味着如果您在POSIX环境中包含任何POSIX标头 - 记住<stdio.h>
是POSIX标头以及标准C标头 - 那么您不应该有任何以_t
结尾的typedef,例如:
C:
typedef struct data_t { ... } data_t; // Usurping POSIX namespace
C ++:
struct data_t { ... }; // Usurping POSIX namespace
POSIX中还有许多其他“保留名称空间”规则 - 请参阅链接页面。这是一个通常被蔑视的(但它会定期伤害我工作的项目,因为它忽略了这个规则 - 遗憾的是我没有设置所有规则。)
答案 2 :(得分:0)
人们有时会使用“g_”,它们实际上是指“f_”,即文件范围变量。
答案 3 :(得分:0)
除了单独的下划线前缀(例如_foo
)之外,这只是非常难看的风格。使用单独的下划线通常会导致未定义的行为。
答案 4 :(得分:0)
我个人觉得这种做法完全没必要,而且在某些方面令人憎恶。如果您使用的是体面的IDE,则不需要任何此类。