typedef struct_t struct_array[ROWS][COLS];
int main()
{
struct_array structArray1 = {0};
}
イニシャライザの周りに中かっこがないというエラーが表示されました。この警告に関する gcc のバグがあることは知っています。それとも私は何か間違ったことをしていますか?
typedef struct_t struct_array[ROWS][COLS];
int main()
{
struct_array structArray1 = {0};
}
イニシャライザの周りに中かっこがないというエラーが表示されました。この警告に関する gcc のバグがあることは知っています。それとも私は何か間違ったことをしていますか?
struct_array structArray1 = {{{0}}};
最初は配列の 1 次元、2 番目は 2 次元、3 番目は構造体の初期化に使用する必要があります。コードは正しいですが、他の回答で述べられているように、GCC にはバグがあります。
あなたのコードは完全に正しいです。そして、GCC にもバグがあることは間違いありません。ここで説明されています。
いくつかの選択肢があります。
今のところ無効-Wmissing-braces
にします。
空の初期化ブレースを使用します (GCC 拡張機能):
struct_array structArray1 = {};
1 つの完全なオブジェクトを初期化します。3 要素struct_t
の場合、たとえば次のようになります。
struct_array structArray1 = { { { 0, 0, 0 } } };
必要な中かっことゼロをすべて指定します。上記の #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 } } };
別のコンパイラを使用してください。多分?
GCC のバグを修正します。
試す:
int main(){
struct_t structArray[ROWS][COLS];
memset(structArray, 0, sizeof(structArray));
}
(memset はゼロで埋めます)