我试图了解开发人员何时需要使用前面的'_'定义C
变量。它是什么原因?
例如:
uint32_t __xyz_ = 0;
答案 0 :(得分:10)
也许这有帮助,来自C99,7.1.3(“保留标识符”):
以下划线和大写字母或其他字母开头的所有标识符 下划线总是保留用于任何用途。
所有以下划线开头的标识符始终保留用作标识符 在普通名称和标签名称空间中都有文件范围。
道德:对于普通用户代码,最好不要使用下划线来启动标识符。
(在相关的说明中,我认为您还应该明确命名 types ,并使用尾随_t
,这是为标准类型保留的。)
答案 1 :(得分:8)
这是全局符号的C实现的头文件中使用的技巧,以防止与用户定义的其他符号发生最终冲突。
由于C缺少名称空间功能,因此这是一种避免与用户名称冲突的基本方法。
不鼓励在您自己的标头和源文件中声明此类符号,因为它可能会在您的代码和C实现之间引入命名冲突。即使这不会对您当前的实现产生冲突,您仍然容易在不同/未来的实现中发生奇怪的冲突,因为它们可以自由地使用带有下划线的其他符号。
答案 2 :(得分:1)
无论是否为C,前导下划线为程序员提供状态指示,因此他无需查看。在PHP或任何面向对象的语言中,我们处理由1000名作者编写的成千上万的属性和方法,看到下划线前缀消除了挖掘类并查看其声明为私有,受保护还是公共的需要。这是一个巨大的节省时间。这个练习在C之前开始,我相信......