>>OS : Windows10 Enterprise (ver 22H2)
>>コンパイラ: gcc 6.3.0
>
>ちょっと調べてMinGWはgcc 6.3.0って古すぎないかという記事を見かけたので、
>
https://stackoverflow.com/questions/68360901/why-is-the-latest-mingw-gcc-version-6-3-0
>
>MinGWなら6.3.0があるのかな、とosdn.netからmingw-get.exeとやらを入手して
>6.3.0をインストールしようとしたのですがないと言われて
>7.3.0-1を(むりやり)動かしたら再現しました。正直驚きました。
>
>>#include <stdio.h>
>>
>>static int a[];
>>
>>int main()
>>{
>>
>> return 0;
>>}
>
>これだと配列aのサイズが決まっていないわけで、ではコンパイラはaのサイズを
>いくつだと思っているのか確認しようと
>
> printf("sizeof a..%d\n", sizeof(a));
>
>とやってみると、
>invalid application of 'sizeof' to incomplete type 'int[]'
>
>と言われます。aがincomplete type(不完全型)だと言っています。
>
>これについては規格でも「6.2.5 型」のところで
>
>| 大きさの分からない配列型は,不完全型とする。その型は,それ以降のその型の
>| 識別子の宣言(内部結合又は外部結合をもつ)で大きさを指定することによって,
>| 完全となる。
>
>という記載があるので、以下のようにint a[10];を追加したら、
>gccの9.4.0でもコンパイルが通って、「sizeof a..40」と表示されました。
>
>#include <stdio.h>
>
>static int a[];
>
>static int a[10];
>
>int main()
>{
> printf("sizeof a..%d\n", sizeof(a));
> return 0;
>}
>
>それにしても、staticなのにこの.c内でサイズ指定して完全型にならないのなら、
>やっぱりコンパイルを通してはダメだと思うのですが……
>なので最近のgccではエラーにしているのだと思います。
>私も勉強になりました。ありがとうございました。
ご回答ありがとうございます。
私のgccそんなに古かったとは…
環境構築の際に、どこかの参考サイトの書いてあるがままにインストールしていました。(反省します)
gccを13.2.0に更新して試してみたところ、前橋様と同じ挙動になりました。
こちらこそ変な質問に丁寧にご対応頂きありがとうございました。