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

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

例如:

 uint32_t __xyz_ = 0; 

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

  • 所有以下划线开头的标识符以及大写字母或另一个下划线始终保留用于任何用途。

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

道德:对于普通用户代码,最好不要用下划线开始标识符。

(在相关的说明中,我认为你也应该清楚地命名类型为尾随_t ,它是为标准类型保留的。)

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

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

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

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