3

C++ 入門書は次のように述べています。

プログラムで定義する識別子には、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;

}

g++ 4.7.1上記のコードは、次のフラグを使用して、Mac で完全に正常にコンパイルされます。

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

私は何が欠けていますか?

4

2 に答える 2

9

両方向の交通を気にせずに通りを横断することは、あなたがバスにひかれるという保証はありませんが、それでも悪い考えです。

ある日、それは機能しません...

于 2012-08-18T19:18:14.033 に答える
4

何もない。先頭にアンダースコアが続き、その後に大文字が続く識別子と、2つのアンダースコアが付いた識別子は単に予約されています。

コンパイラベンダーはいつでもそれらを使用することを決定する可能性があるため(たとえば、コンパイラベンダーがキーワードとして_Aを使用することはまったく問題ありません)、したがって、それらを使用しないでください。多くの場合、標準ライブラリは予約済みの識別子を使用して実装されているため、コンパイルエラーは発生しません。

于 2012-08-18T19:13:53.997 に答える