在C程序中若是在聲明函數的時候若是沒有任何參數那麼須要將參數定義爲void以此來限定此函數不可傳遞任何參數,若是不進行限定讓參數表默認爲空其意義是能夠傳遞任何參數,這個問題的由來其實是因爲要兼容早期的K&C標準形成的。K&C 在聲明函數時參數表爲空,也就是說函數聲明時的函數原型簽名信息不包含參數信息,若是要有明確的定義空參數的行爲那麼就要本身去處理它。
//空參數表表明能夠傳遞任意的參數,
void fun();
fun(1);//正常編譯
fun(1,2,3);//正常編譯markdown
//參數表定義爲void纔是表示不能傳遞任何參數
void noargfun(void);
noargfun(1);//編譯錯誤,有的編譯器僅僅是警告函數
在C++中定義函數時是否有必要對無參數的函數列表定義void參數呢?答案是No。C++標準規定若是沒有對參數列表進行定義那麼就表示函數不能傳遞任何參數,這從語義上來說更符合人的思惟方式。如下是C++代碼
//空參數表的意義是不能夠傳遞任何參數
void fun();//void fun(void)含義相同
fun(1);//編譯錯誤
fun(1,2,3);//編譯錯誤code
固然若是指定義void那麼無論在C仍是C++都表示不能夠傳遞任何參數。