質問編集履歴
3
ご指摘により、コードは抜粋から全文へと変更。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,9 +1,30 @@
|
|
1
1
|
###問題のコード
|
2
2
|
```C
|
3
|
+
#include <stdlib.h>
|
4
|
+
#include <stdio.h>
|
5
|
+
|
6
|
+
int main(void)
|
7
|
+
{
|
8
|
+
double A[5] = {
|
9
|
+
[0] = 9.0,
|
10
|
+
[1] = 2.9,
|
11
|
+
[4] = 3.e+25,
|
12
|
+
[3] = .00007,
|
13
|
+
};
|
14
|
+
|
15
|
+
for (size_t i = 0; i < 5; ++i)
|
16
|
+
{
|
17
|
+
if (i)
|
18
|
+
{
|
3
|
-
printf("element %zu is %g, \tits square is %g\n",
|
19
|
+
printf("element %zu is %g, \tits square is %g\n",
|
4
20
|
i,
|
5
21
|
A[i],
|
6
22
|
A[i] * A[i]);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
return EXIT_SUCCESS;
|
27
|
+
}
|
7
28
|
```
|
8
29
|
###当該のコードについて発生した警告
|
9
30
|
too many arguments for format [-Wformat-extra-args]
|
@@ -15,7 +36,6 @@
|
|
15
36
|
###補足
|
16
37
|
iまたはA[i]またはA[i]*A[i]のどれか一つを引数から削除すれば警告は現れなくなる。
|
17
38
|
環境はWindowsで、mingw-w64のgccを用いたvscodeのデバッガを用いている。コンパイラも実行もできるが、警告が出ている状態(おそらく-Wallフラグを立てているため)。
|
18
|
-
コードはModern Cという書籍のもの。もちろんこの前後にかなり短い多少のコードはあるが、明らかにこの警告には関与がなさそうなのでprintfの部分のみ抜粋した。もし必要があれば更にコードは開示します。
|
19
39
|
警告は他に2つほど出ていて、それぞれ
|
20
40
|
unknown conversion type character 'z' in format [-Wformat=]
|
21
41
|
format '%g' expects argument of type 'double', but argument 2 has type 'size_t' {aka 'long long unsigned int'} [-Wformat=]
|
2
いくつかの項目を追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -21,4 +21,5 @@
|
|
21
21
|
format '%g' expects argument of type 'double', but argument 2 has type 'size_t' {aka 'long long unsigned int'} [-Wformat=]
|
22
22
|
となっています。
|
23
23
|
iはsize_t、Aはdouble[]型で宣言されています。
|
24
|
-
更に追記:WSLのgccで全く同じコードを同じgccのコマンドでコンパイルしてみたところ警告は何も出ませんでした。一方でwindowsのmingw-w64ではやはり3つの警告が出ました。
|
24
|
+
更に追記:WSLのgccで全く同じコードを同じgccのコマンドでコンパイルしてみたところ警告は何も出ませんでした。一方でwindowsのmingw-w64ではやはり3つの警告が出ました。
|
25
|
+
更に追記:-std=99オプションを付与した場合も同様の警告文でした。また、gccのバージョンは8.1.0です。
|
1
linux環境での挙動の報告を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,10 +14,11 @@
|
|
14
14
|
もしコードに問題があれば、警告を受けない正しい書き方に訂正したい。
|
15
15
|
###補足
|
16
16
|
iまたはA[i]またはA[i]*A[i]のどれか一つを引数から削除すれば警告は現れなくなる。
|
17
|
-
環境はWindowsで、gccを用いたvscodeのデバッガを用いている。コンパイラも実行もできるが、警告が出ている状態(おそらく-Wallフラグを立てているため)。
|
17
|
+
環境はWindowsで、mingw-w64のgccを用いたvscodeのデバッガを用いている。コンパイラも実行もできるが、警告が出ている状態(おそらく-Wallフラグを立てているため)。
|
18
18
|
コードはModern Cという書籍のもの。もちろんこの前後にかなり短い多少のコードはあるが、明らかにこの警告には関与がなさそうなのでprintfの部分のみ抜粋した。もし必要があれば更にコードは開示します。
|
19
19
|
警告は他に2つほど出ていて、それぞれ
|
20
20
|
unknown conversion type character 'z' in format [-Wformat=]
|
21
21
|
format '%g' expects argument of type 'double', but argument 2 has type 'size_t' {aka 'long long unsigned int'} [-Wformat=]
|
22
22
|
となっています。
|
23
|
-
iはsize_t、Aはdouble[]型で宣言されています。
|
23
|
+
iはsize_t、Aはdouble[]型で宣言されています。
|
24
|
+
更に追記:WSLのgccで全く同じコードを同じgccのコマンドでコンパイルしてみたところ警告は何も出ませんでした。一方でwindowsのmingw-w64ではやはり3つの警告が出ました。
|