// 情況 A:錯誤示範
// 文件順序:main() -> test() 定義
int test(int a, int b, int c, int d); // 聲明無默認值
int main() {
test(10); // 錯誤:編譯器看到聲明無默認值,實參不足
}
int test(int a, int b=10, int c=20, int d=30) { // 定義處有默認值
printf("%d", a+b+c+d);
return 0;
}
修正方案:將默認值移至聲明,或將定義前置於調用之前。
// 情況 B:正確寫法(推薦)
int test(int a, int b=10, int c=20, int d=30); // 聲明帶默認值
int main() {
test(10); // 正常:編譯器直接使用聲明中的默認值
}
int test(int a, int b, int c, int d) { // 定義不再重複默認值
printf("%d", a+b+c+d);
return 0;
}
-Wextra 編譯選項可捕獲重複默認參數警告。本文轉載自 “李海川” 博客,原文地址:https://lihaichuan.blog.51cto.com/498079/1303998