15

次のように配列を初期化できます。

int myArray[][] = { {10,20} ,{30,40} , {50} };

正常に動作します。

しかし、私は奇妙な状況に遭遇しました。

int myAnotherArray[][] = { {,} ,{,} , {,} };

上記のコード行は正常にコンパイルされます。私によると、これは奇妙です。コンパイラがこのステートメントを解析するとき、それは{and,}すべて一緒に遭遇するからです。コンパイラは、その間に定数またはリテラルを期待するべきではありませんか?上記のステートメントがどのように正確に解析され、そのような状況が発生したときにコンパイラーが正確に何を行うかを誰かに教えていただければ幸いです。

4

1 に答える 1

23

これは、構文が末尾のコンマを許可しているという事実の単なる癖です。

末尾のコンマを許可することは、たとえば、次のようなものを生成するコードジェネレーターに親切であり、たとえば{ 0, 1, }、の最後の行を便利にコメントアウトすることができます。

int[] myArray = {
    0,
//  1
};

(ご存知かもしれませんが、末尾,は無視されます。つまり{ , }、空の配列が生成されます。)

関連する質問:

于 2012-07-13T15:42:54.053 に答える