通常接受的变量名称格式 - C / C ++

时间:2010-12-02 15:37:36

标签: c++ c variables

我意识到这可能是一个偏好问题,但我注意到我见过的很多代码示例中的变量名都有g_前缀,s_,{{1或者只是m_。这是一种普遍接受的做法,这些前缀是什么意思?还有其他人会很高兴知道吗?

5 个答案:

答案 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。

规则很复杂,以至于更容易使用:

  • 不要使用下划线
  • 启动标识符

POSIX预留标识符约定

还要注意使用“_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,则不需要任何此类。