我試過下面的c程序&我希望得到編譯時錯誤,但爲什麼編譯器沒有給出任何錯誤?爲什麼編譯器在傳遞int(不是int *)作爲scanf()的參數時不會發出錯誤?
#include <stdio.h>
#include <conio.h>
int main()
{
int a,b;
printf("Enter a : ");
scanf("%d",&a);
printf("Enter b : ");
scanf("%d",b);
printf("a is %d and b is %d\n",a,b);
getch();
return 0;
}
我不寫&
在scanf("%d",b)
。在編譯時,編譯器不會給出任何錯誤,但在執行期間,b的值是2686792(垃圾值)。
您是否使用'-Wall'或任何特定警告進行編譯? – Eregrith
爲什麼不能編譯? 'scanf'和'printf'家族是接收未知類型的可變函數,因此編譯器無法檢查參數的類型是否正確。它們的所有參數遵循默認升級 –
編譯時沒有理由失敗。 – juanchopanza