###問題のコード
C
1#include <stdlib.h> 2#include <stdio.h> 3 4int main(void) 5{ 6 double A[5] = { 7 [0] = 9.0, 8 [1] = 2.9, 9 [4] = 3.e+25, 10 [3] = .00007, 11 }; 12 13 for (size_t i = 0; i < 5; ++i) 14 { 15 if (i) 16 { 17 printf("element %zu is %g, \tits square is %g\n", 18 i, 19 A[i], 20 A[i] * A[i]); 21 } 22 } 23 24 return EXIT_SUCCESS; 25}
###当該のコードについて発生した警告
too many arguments for format [-Wformat-extra-args]
###解決したいこと
####一
警告が発生する原因を理解したい。明らかに引数の個数は正しいと思われるにもかかわらずこのような警告が出される理由がわからないため。
####ニ
もしコードに問題があれば、警告を受けない正しい書き方に訂正したい。
###補足
iまたはA[i]またはA[i]*A[i]のどれか一つを引数から削除すれば警告は現れなくなる。
環境はWindowsで、mingw-w64のgccを用いたvscodeのデバッガを用いている。コンパイラも実行もできるが、警告が出ている状態(おそらく-Wallフラグを立てているため)。
警告は他に2つほど出ていて、それぞれ
unknown conversion type character 'z' in format [-Wformat=]
format '%g' expects argument of type 'double', but argument 2 has type 'size_t' {aka 'long long unsigned int'} [-Wformat=]
となっています。
iはsize_t、Aはdouble[]型で宣言されています。
更に追記:WSLのgccで全く同じコードを同じgccのコマンドでコンパイルしてみたところ警告は何も出ませんでした。一方でwindowsのmingw-w64ではやはり3つの警告が出ました。
更に追記:-std=99オプションを付与した場合も同様の警告文でした。また、gccのバージョンは8.1.0です。
回答5件
あなたの回答
tips
プレビュー