一直都以為C/C++中形如 這樣的函數聲明其意義就是一個參數 void(沒有參數)的函數。然而今天在看C++的時候突然看到這麼一句: 這一點老師並沒有講到,學校教科書里也沒有提到,帶著好奇心,我特意試了一下 test.c 這也解釋了為什麼主函數要寫成這樣的原因 ...
一直都以為C/C++中形如
int func();
這樣的函數聲明其意義就是一個參數 void(沒有參數)的函數。然而今天在看C++的時候突然看到這麼一句:
對於帶空參數表的函數,C和C++有很大的不同。在C語言中,聲明 int func2(); 表示“一個可帶任意參數(任意數目,任意類型)的函數”。這就妨礙了類型檢查。而在C++語言中它就意味著“不帶參數的函數”。
這一點老師並沒有講到,學校教科書里也沒有提到,帶著好奇心,我特意試了一下
test.c
1 #include <stdio.h> 2 3 void fun(); 4 int main() 5 { 6 fun(1, 1); 7 8 return 0; 9 } 10 11 void fun(int a, int b) 12 { 13 printf("%d\n", a+b); 14 }
編譯通過 $ gcc -Wall test.c -o test $ ./test
2
$ mv test.c test.cpp $ g++ -Wall test.cpp -o test test.cpp: 在函數‘int main()’中: test.cpp:6:10: 錯誤:too many arguments to function ‘void fun()’ fun(1, 1); ^ test.cpp:3:6: 附註:在此聲明 void fun(); ^~~
這也解釋了為什麼主函數要寫成這樣的原因
int main(void)