gcc コンパイラからの警告メッセージについて質問があります。警告メッセージは、scanf の引数が、ユーザー入力を運ぶ変数へのポインターではない場合に発生します。
#include <stdio.h>
int main(int argc, const char *argv[]) {
float number;
scanf("%f", number); /* the value of 'number' is passed, instead of the adress to it */
return 0;
}
gcc は、プログラムのコンパイル時に次の警告メッセージを表示します。
scanf-problem.c: In function 'main':
scanf-problem.c:5:5: warning: format '%f' expects argument of type 'float *', but argument 2 has type 'double' [-Wformat=]
scanf("%f", number);
^
予想通り、gcc は scanf の 2 番目の引数に型 'float *' (float へのポインター) を持たせたいと考えています。私を悩ませているのは、gcc が 2 番目の引数の型が「double」であると信じているのに、実際には型が「float」であるということです。
なぜ gcc は scanf の 2 番目の引数が double であると信じているのに、実際には float なのですか?
答えを得るためにこのトピックについていくつかの調査を行いましたが、見つけたすべての答えは、警告を取り除く方法に関するものです (「番号」ではなく「&番号」と書きます)。