7

Web を少し検索した後、指定された初期化子は C++ 標準の一部ではないという結論に達しましたが、g++ (4.7.0) を使用してこのコードをコンパイルすると、

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
    int test[2][2] ={
        [0]={1,2},
        [1]={3,4},
    };

    for (int x = 0; x<2;x++)
    {
        for (int y = 0; y<2; y++)
        {
            cout << test[x][y] << endl;
        }
    }

    return 0;
}

コンパイルして正常に実行されます。

何か不足していますか?私が読んだすべてのことから、C++ はこのタイプのコードをサポートすべきではありません。

4

2 に答える 2

0

通常、各コンパイラには独自の言語拡張機能があります。これは、g++ およびたとえば MS VC++ と同様に有効です。たとえば、MS VC++ では、それぞれにステートメントを使用できます。

于 2013-11-05T10:38:57.120 に答える
-1

gcc コンパイラの機能を見つけたようです: オプション ( など-pedantic -std=XXXX) を使用しても抑制または警告できない、文書化されていない拡張機能です。

コードが標準に準拠していることを合理的に確信したい場合は、常にさまざまなコンパイラを使用し、コードが警告なしでそれらすべてを通過することを確認することをお勧めします (そして最も厳密な警告オプションを使用します)。gcc と clang は無料なので、常に少なくとも 2 つのコンパイラを使用できます (そして、clang は標準への準拠に優れています)。

于 2013-11-05T12:14:00.333 に答える