K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>>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に更新して試してみたところ、前橋様と同じ挙動になりました。 >こちらこそ変な質問に丁寧にご対応頂きありがとうございました。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!