代码之家  ›  专栏  ›  技术社区  ›  Shachar Shemesh

为什么Linux上的C++限制不是唯一的

  •  3
  • Shachar Shemesh  · 技术社区  · 7 年前

    请考虑以下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
    

    这是因为程序定义了一个全局变量,该变量与名称管理后得到的函数同名。

    我可以想到许多解决方法,其中最简单的方法是在损坏的名称的开头使用两个下划线(两个下划线保留用于私有实现)。

    问题是:为什么选择了一个使之成为可能的方案?

    1 回复  |  直到 7 年前
        1
  •  8
  •   Pete Becker    7 年前

    以一个下划线开头,后跟一个大写字母的名称保留,与包含两个下划线的名称保留的方式相同。

    例如,从2003 C++标准,第174.3.1.2节,“每一个包含双下划线的名字 或以下划线开头,后跟大写字母 (2.11)保留用于任何用途。”

    推荐文章