// 定義
int max(int a, int b) { return a > b ? a : b; }
int main() { printf("%d", max(1,2)); } // 直接調用,無需聲明
缺點:函數順序耦合,大型專案不可維護。
int main() {
int max(int, int); // 僅在 main 內可見
printf("%d", max(1,2));
}
int max(int a, int b) { ... }
缺點:作用域受限,易重複聲明,不推薦。
// 頂部聲明區
int max(int, int);
int min(int, int);
int main() { ... }
int max(int a, int b) { ... }
int min(int a, int b) { ... }
優點:結構清晰,`main` 置頂閱讀業務邏輯。
// math_utils.h (頭檔)
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int max(int, int); // 僅聲明
int min(int, int);
#endif
// math_utils.c (實現)
#include "math_utils.h"
int max(int a, int b) { return a > b ? a : b; }
int min(int a, int b) { return a < b ? a : b; }
// main.c (使用)
#include "math_utils.h"
int main() { printf("%d", max(1,2)); }
編譯鏈接:`gcc main.c math_utils.c -o app`。頭檔防重複包含 (`#ifndef`) 必不可少。
| 場景 | 正確寫法 | 說明 |
|---|---|---|
| 無參數 | void func(void) | C 標準要求 `(void)`;`()` 為舊式原型 (無參數檢查) |
| 無返回值 | void func() | 必須寫 `void`,不可省略 |
| 可變參數 | int printf(const char*, ...) | 至少一個固定參數,配合 ` |
| 參數省略 | int sum(int, int, int); | 聲明可省略參數名,定義必須保留 |
「聲明在頭檔,定義在實現檔,調用包含頭檔」是 C 語言模組化開發的基石。遵循標準原型 `(void)`、`void` 返回、參數打包、錯誤碼規範,可構建可維護、可複用、可測試的 C 專案架構。