У меня есть вопрос о предупреждении от компилятора gcc. Предупреждающее сообщение возникает, когда аргумент scanf не является указателем на переменную, которая должна нести пользовательский ввод.gcc scanf warning считает, что float double
#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 хочет второй аргумент зсапЕ иметь тип «поплавок *» (указатель на поплавок). Что меня беспокоит, так это то, что gcc полагает, что второй аргумент имеет тип «double», когда он действительно имеет тип «float».
Это приводит меня к вопросу, почему gcc полагает, что второй аргумент scanf является двойным, когда он фактически является поплавком?
Я сделал некоторые исследования по этой теме, чтобы получить ответ, но каждый ответ, который я нахожу, касается того, как избавиться от предупреждения (напишите '& номер' вместо 'number').
Это в основном зсапЕ принимает адрес, как поплавок *, и вы прошли число которых составляет 8 байт, вы на ПК 64 бит? – Ishmeet
Это объясняет многое. Действительно, я на 64-битном ПК. – oscfri