为什么人们在C ++中使用__(双下划线)这么多

我正在浏览一些开源的C ++代码,并注意到在代码中使用得分的情况下,主要是在variables名称的开头。

return __CYGWIN__; 

只是想知道是有这个原因,还是只是一些人的代码风格? 我会觉得我很难阅读。

从C ++编程,规则和build议 :

在标识符中使用两个下划线(`__')是根据ANSI-C标准为编译器的内部使用保留的。

下划线(`_')通常用于库函数的名称(如“_main”和“_exit”)。 为了避免冲突,不要用下划线开始标识符。

除非他们认为他们是“实施的一部分”,即标准库,否则他们不应该这样做。

这些规则是相当具体的,比其他人提出的要细一些。

所有包含双下划线或以下划线和大写字母开头的标识符都被保留用于所有作用域的实现,即它们可以用于macros。

另外,所有其他以下划线开头的标识符(即,后面紧跟着另一个下划线或大写字母)被保留用于全局范围的实现。 这意味着您可以在您自己的名称空间或类定义中使用这些标识符。

这就是为什么Microsoft使用具有前导下划线的函数名称,并且全部使用小写字母表示许多不属于C ++标准的核心运行时库函数。 这些函数名称保证不会与标准C ++函数或用户代码函数冲突。

根据C ++标准,以一个下划线开始的标识符是为库保留的。 以两个下划线开头的标识符保留给编译器供应商。

上述评论是正确的。 __Symbol__通常是由有用的编译器(或预处理器)供应商提供的魔术令牌。 也许这些中最广泛使用的是__FILE____LINE__ ,它们被C预处理器扩展来指示当前的文件名和行号。 当你想logging某种程序断言失败时,这很方便,包括错误的文本位置。

这是你在“普通”代码中不应该做的事情。 这可以确保编译器和系统库可以定义不会与您的符号冲突的符号。

除了许多其他人回答的库之外,有些人还将macros或#define值命名为与预处理器一起使用。 这样可以更容易地处理,并且可能允许旧版编译器中的错误得到解决。

像其他人提到的,它有助于防止名称冲突,并有助于描述库variables和你自己的。