1. 程式人生 > >C與C++的函數聲明中省略參數的不同意義

C與C++的函數聲明中省略參數的不同意義

style clu nts 這一 too spa 好奇心 函數聲明 fun

一直都以為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)

C與C++的函數聲明中省略參數的不同意義