5

以下を考えると:

struct example_struct
{
  char c;
  int i;
};

次のイニシャライザ構文は C99 で有効ですか?

構文例 #1

struct example_struct example = { 'a', .i = 1};

構文例 #2

struct example_struct example = { .c = 'a', 1};

私は単純な構造体パーサーを作成していますが、私のテストでは、XCode 4.2 を使用してもコンパイラ エラーは発生しません。パーサーを C99 準拠にしたいと考えています。私の理解 (標準参照なし) では、構造体初期化子には、すべての名前なしまたは名前付き (つまり、指定された) メンバーが必要です。

構文例 #1 と #2 はコンパイラ エラーでしょうか?

例が有効な場合、初期化構文のルールは何ですか?

更新された質問の例

struct example_struct_3
{
  char c;
  int i;
  float f;
};

struct example_struct_3 example = { .i = 1, 1.0};

同じ主要な質問で、例 3 はどのように機能しますか? 私は主に、指定された初期化子と標準の初期化子の任意の順序について混乱しています。

4

1 に答える 1

7

初期化の例 1 と 2 はどちらも有効な C99/C11 初期化です。指定イニシャライザと非指定イニシャライザをイニシャライザ リストに混在させることができます。

編集:新しい例 3 に関しては、初期化も有効です。初期化後、example.chas value 0example.ihas value 1example.fhas value (float) 1.0

于 2013-02-10T17:23:24.313 に答える