我有一個關於來自gcc編譯器的警告消息的問題。當scanf的參數不是指向應該攜帶用戶輸入的變量的指針時,會發生警告消息。gcc scanf警告認爲float是雙重的
#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的第二個參數具有'float *'類型(指向float的指針)。令我困擾的是gcc認爲第二個參數的類型是'double',當它實際上有'float'類型的時候。
這導致了我的問題,爲什麼gcc認爲scanf的第二個參數是double,當它實際上是float?
我已經做了一些關於這個話題的研究來得到答案,但我找到的每個答案都是關於如何擺脫警告(寫'&數字'而不是'數字')。
它基本上是scanf函數接受地址,像浮*,並且已經通過了這8個字節數,你是一個64位的電腦上? – Ishmeet
這解釋了很多。事實上,我在一臺64位電腦上。 – oscfri