【问题标题】:C++ identifiersC++ 标识符
【发布时间】:2012-08-18 19:11:50
【问题描述】:

C++ Primer 说:

我们在程序中定义的标识符可能不包含 2 个连续的 下划线,标识符也不能以下划线开头 立即由一个大写字母。此外,标识符被罚款 函数外不能以下划线开头

一切都很好,但是

int _c = 55;                  // outside function starts with _

int main () {

    int _A = 12;              // _ followed by uppercase letter
    cout << _A << endl;

    int __b__ =33;            // 2 consecutive __
    cout << __b__ << endl;

    cout << _c << endl;

}

上面的代码编译得非常好在mac上,g++ 4.7.1,使用以下标志

g++ -pedantic -Wall -Werror -std=c++11 -O3 -funroll-loops -fprefetch-loop-arrays

请问我错过了什么?

【问题讨论】:

  • 当你打破“规则”时,并不保证它不会起作用。它可能会也可能不会。
  • 不是所有不正确的东西都必须编译失败。就像不是你可以用英语形成的每一个句子都必须自动有意义。

标签: c++ identifier


【解决方案1】:

在不注意双向交通的情况下过马路并不能保证您会被公共汽车碾过,但这仍然是个坏主意。

有一天它不会工作......

【讨论】:

    【解决方案2】:

    什么都没有。带有前导下划线后跟大写字母的标识符和带有两个下划线的标识符仅保留。

    您的编译器供应商可能会决定随时使用它们(例如,编译器供应商可以使用 _A 作为关键字),因此您不应该使用它们。通常,标准库是使用保留标识符实现的,因此它们不会导致编译错误。

    【讨论】:

    • 有没有办法将这些视为警告?
    • 不,那行不通,因为编译器不知道标准库中的代码以及您的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多