K.Maebashi's BBS 削除ページ

以下の投稿を削除します。

[2376] Re:ポインタ完全制覇の質問
返信
投稿者:(ぱ)こと管理人
2024/05/17 00:46:58

>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ではエラーにしているのだと思います。 私も勉強になりました。ありがとうございました。
パスワード:

管理者削除