3
typedef struct_t struct_array[ROWS][COLS];

int main()
{
    struct_array structArray1 = {0};

}

イニシャライザの周りに中かっこがないというエラーが表示されました。この警告に関する gcc のバグがあることは知っています。それとも私は何か間違ったことをしていますか?

4

3 に答える 3

3

struct_array structArray1 = {{{0}}};最初は配列の 1 次元、2 番目は 2 次元、3 番目は構造体の初期化に使用する必要があります。コードは正しいですが、他の回答で述べられているように、GCC にはバグがあります。

于 2013-07-14T18:00:52.287 に答える
2

あなたのコードは完全に正しいです。そして、GCC にもバグがあることは間違いありません。ここで説明されています

いくつかの選択肢があります。

  1. 今のところ無効-Wmissing-bracesにします。

  2. 空の初期化ブレースを使用します (GCC 拡張機能):

    struct_array structArray1 = {};
    
  3. 1 つの完全なオブジェクトを初期化します。3 要素struct_tの場合、たとえば次のようになります。

    struct_array structArray1 = { { { 0, 0, 0 } } };
    
  4. 必要な中かっことゼロをすべて指定します。上記の #3 と同じ構造体型と 2x2 配列を想定すると、次のようになります。

    struct_array structArray1 = { { { 0, 0, 0 }, { 0, 0, 0 },
                                    { 0, 0, 0 }, { 0, 0, 0 } },
                                  { { 0, 0, 0 }, { 0, 0, 0 },
                                    { 0, 0, 0 }, { 0, 0, 0 } } };
    
  5. 別のコンパイラを使用してください。多分

  6. GCC のバグを修正します。

于 2013-07-14T17:59:51.107 に答える
1

試す:

int main(){
    struct_t structArray[ROWS][COLS];
    memset(structArray, 0, sizeof(structArray));
}

(memset はゼロで埋めます)

于 2013-07-14T17:54:32.760 に答える