int foo(void):**明確宣告不接受任何參數**,呼叫時傳參會產生**編譯錯誤 (error)**int foo():**舊式宣告,參數表未指定**,呼叫時傳參僅產生**警告 (warning)**,實際忽略參數// int add(); // 舊式宣告
int add(void); // 現代宣告:不接受參數
int main(void) {
int i = add(5, 6); // 傳遞兩個參數
printf("%d\n", i);
return 0;
}
int add(a, b) { // 老式定義:參數型別預設 int
return a + b;
}
| 宣告方式 | 呼叫 add(5,6) 結果 | C 標準 |
|---|---|---|
int add(); | 警告 (warning):參數過多,但編譯通過 | C89/C99 相容 |
int add(void); | 錯誤 (error):參數不匹配,編譯失敗 | C89 起標準語法 |
永遠使用 (void) 明確表示無參數。這不僅符合現代 C 標準 (C99/C11/C18),更能讓編譯器捕捉呼叫端錯誤,避免無聲的 Bug。
補充知識:C 語言函式檢查以**函式名稱**為主,參數表檢查較寬鬆。舊式定義
int add(a, b)參數型別預設為int,現代寫法應為int add(int a, int b)。