10

CDT パーサーは、構造体の初期化に関する構文エラーを報告します。

typedef struct MyStruct
{
    int a;
    float b;
};

int main( void )
{
    // GNU C extension format
    MyStruct s = {a : 1, b : 2};
    // C99 standard format
//    MyStruct s = {.a = 1, .b = 2};

    return 0;
}

GCC は:フォームを obsolete としてリストしていますが、廃止も削除もされていないようです。C99 では確かに標準.<name> =形式を使用しますが、C++ では:指定された初期化について私が認識している唯一のオプションです。

ツールチェーンを MinGW と Cross GCC の両方に設定しようとしましたが、どちらも機能していないようです。

Eclipse にこの構文を認識させるにはどうすればよいですか? 1 行では大したことではありませんが、変数が宣言されていることを Eclipse が認識しないため、変数の他のすべてのインスタンスに引き継がれます。

4

2 に答える 2

2

この.フォームは C99 でのみ使用でき、C++ のフレーバーでは使用できません。C++ では、標準に準拠した唯一のオプションは、順序付けられた初期化またはコンストラクターです。

同様のインターフェイスを作成するために、適切な参照を返すメソッドでチェーンを使用できます(ここでは、a と b は変数ではなくメソッドです)。

MyStruct s;
s.a(1).b(2);
于 2013-01-14T19:35:10.303 に答える
1

私もこの問題に直面しており、以下の方法を使用して解決しています。

MyStruct s = {
 1,
 2,
}

これには、プログラマが初期化の順序を確認する必要があります。

于 2015-04-29T02:29:17.160 に答える