请考虑以下 C++ 程序:
int _Z5func2v;
void func2() {
}
当你尝试编译它时,它失败了:
$ g++ test.cpp -c
/tmp/cc1RDxpU.s: Assembler messages:
/tmp/cc1RDxpU.s:13: Error: symbol `_Z5func2v' is already defined
/tmp/cc1RDxpU.s: Error: .size expression for _Z5func2v does not evaluate to a constant
这是因为程序定义了一个全局变量,该变量的名称与函数在名称修改后得到的名称相同。
我能想到很多解决这个问题的方法,其中最简单的是在错位名称的开头使用两个下划线(两个下划线保留供私有(private)实现使用)。
问题是:为什么选择一个使之成为可能的方案?
最佳答案
以单个下划线开头后跟一个大写字母的名称保留方式与包含两个下划线的名称相同。
例如,来自 2003 C++ 标准的第 17.4.3.1.2 节,“每个包含双下划线 (__) 或以下划线后跟大写字母开头的名称 (2.11)保留用于任何用途的实现。”
关于c++ - 为什么 Linux 上的 C++ 重整不是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54140659/