C变量名称定义中下划线的原因是什么?

时间:2011-11-11 11:30:01

标签: c

我试图了解开发人员何时需要使用前面的'_'定义C变量。它是什么原因?

例如:

uint32_t __xyz_ = 0;

3 个答案:

答案 0 :(得分:10)

也许这有帮助,来自C99,7.1.3(“保留标识符”):

  
      
  • 以下划线和大写字母或其他字母开头的所有标识符   下划线总是保留用于任何用途。

  •   
  • 所有以下划线开头的标识符始终保留用作标识符   在普通名称和标签名称空间中都有文件范围。

  •   

道德:对于普通用户代码,最好不要使用下划线来启动标识符。

(在相关的说明中,我认为您还应该明确命名 types ,并使用尾随_t,这是为标准类型保留的。)

答案 1 :(得分:8)

这是全局符号的C实现的头文件中使用的技巧,以防止与用户定义的其他符号发生最终冲突。

由于C缺少名称空间功能,因此这是一种避免与用户名称冲突的基本方法。

不鼓励在您自己的标头和源文件中声明此类符号,因为它可能会在您的代码和C实现之间引入命名冲突。即使这不会对您当前的实现产生冲突,您仍然容易在不同/未来的实现中发生奇怪的冲突,因为它们可以自由地使用带有下划线的其他符号。

答案 2 :(得分:1)

无论是否为C,前导下划线为程序员提供状态指示,因此他无需查看。在PHP或任何面向对象的语言中,我们处理由1000名作者编写的成千上万的属性和方法,看到下划线前缀消除了挖掘类并查看其声明为私有,受保护还是公共的需要。这是一个巨大的节省时间。这个练习在C之前开始,我相信......