首先,C++里关于下划线的问题是源于C语言,因为C++允许用extern “C”来修饰代码以C语言语法方式编译。然后说C语言里的下划线:C语言确实允许以下划线开头的函数存在,实际上你用一个下划线开头的函数名或者变量是没问题的,但有可能会发生命名冲突。凡是以两个或一个下划线开始,后面紧跟着一个大写字母的标识符,不管它出现在哪里,都是保留给编译程序或标准库函数使用的。此外,凡是以一个下划线开始,后面不管跟着什么内容的标识符,如果它出现在文件范围内(即它不是出现在一个函数内),那么它也是被保留的。如果你用一个保留的标识符来作一个变量的名称,结果是没有定义的(程序可能无法编译,或者可以编译但会崩溃)。即使你能非常幸运地找到一个目前还没有被你的编译程序或函数库使用的标识符,你也应该记住这样的标识符是保留起来供将来使用的。因此,最好还是避免使用以下划线开始的变量名或函数名。举例说明:VC里getch函数不是一个标准库函数,因此,它的名字是_getch,大多数编译器都把非标准库、但又是编译器自己提供的库函数以下划线开头。另外,也有编译器的main函数在编译完成以后,名字是_main,如果你自己写了一个函数叫_main,那么编译器可能不知道最终该链接哪个。所以,你可以理解为:编译器需要预留一些名字,为了方便起见,大多数编译器预留的名字都是以下划线开头的,久而久之就形成了标准。虽然下划线开头也可以用,但不推荐使用,因为容易造成名字冲突。