回答編集履歴

1

誤回答だった為削除。代わりに補足代わりに実験結果追記。

2023/03/01 06:18

投稿

pig_vba
pig_vba

スコア807

test CHANGED
@@ -1,3 +1,73 @@
1
+ ※誤回答だったので消去。otnさんの回答が正しいです。
2
+
3
+ 解答取り消しができないので代わりに実験結果でも載せておきます。。。質問者さんが他の回答にBA付けなおしてくれるとよいのですが。
4
+
5
+ 実験①:プロトタイプ宣言時引数省略、仮引数をint扱いにする→エラーなし(私の解釈だとこの時点でエラー出ると思ってました)
6
+ ```C
7
+ #include <stdio.h>
8
+ float test();
9
+ int main(void){
10
+ float a;
11
+ a=1.0f;
12
+ printf("%f",test(a));
13
+
14
+ }
15
+ float test(int a){
16
+ return a*1.5;
17
+ }
18
+
19
+ ```
20
+ 実験②:仮引数float→当然エラー
21
+ ```ここに言語を入力#include <stdio.h>
22
+
23
+ float test();
24
+ int main(void){
25
+ float a;
26
+ a=1.0f;
27
+ printf("%f",test(a));
28
+ }
29
+
30
+ float test(float a){
31
+ return a*1.5;
32
+ }
33
+ ```
34
+ 実験③:仮引数double→エラーなし
35
+ ```ここに言語を入力
36
+ #include <stdio.h>
37
+
38
+ float test();
39
+ int main(void){
40
+ float a;
41
+ a=1.0f;
42
+ printf("%f",test(a));
43
+ }
44
+
45
+ float test(double a){
46
+ return a*1.5;
47
+ }
48
+ ```
49
+ 実験④:プロトタイプ宣言自体を省略→関数の型にかかわらずエラー
50
+ ```ここに言語を入力
51
+ #include <stdio.h>
52
+
53
+
54
+ int main(void){
55
+ float a;
56
+ a=1.0f;
57
+ printf("%d",test(a));
58
+ }
59
+
60
+ float test(float a){
61
+ return a*1.5;
62
+ }
63
+ ```
64
+ 以上の結果から私の回答が間違いでdoubleと推論された引数が仮引数floatと競合したことが原因のエラーなのが正しいです。
65
+
66
+ ```
67
+ 以下、旧回答(見る価値はない)
68
+
69
+
70
+
1
71
  ### この回答は補足の意味合いが強いです
2
72
  既にエラーの原因は他の方で指摘されているので、もう少し掘り下げて補足とします。
3
73
 
@@ -9,4 +79,4 @@
9
79
  「この関数何かわからんからとりあえず戻り値intの関数ということにしとくわ!」→「float型関数かよ!言ってること違うやんけ!」
10
80
  っていうエラーとして帰ってきたというわけです。この規則の影響でint func()などの関数は**たまたま戻り値がintだったのでプロトタイプ宣言してなくてもエラーなく通ってしまう**、といった状況も起こりえます。
11
81
 
12
-
82
+ ```