函數定義是 C 程式的基本構建塊。本文詳細拆解無參與有參函數的語法結構、函數頭與函數體組成、定義位置的自由度,並以 max 函數為例完整展示。
返回型別 函數名() {
// 宣告區
// 執行語句
}
() 不可省略,表示無參數。void。void hello(void) {
printf("Hello, world\n");
}
返回型別 函數名(型別 參數名, 型別 參數名, ...) {
// 宣告區
// 執行語句
}
int a, b(舊式 K&R 風格已淘汰)。return 運算式;**。int max(int a, int b) {
if (a > b) return a;
else return b;
}
C 標準允許函數定義置於**原始檔任意位置**:main 之前、之後、甚至分散在多檔(需前置宣告)。
#includeint max(int a, int b) { // 定義在 main 前 if (a > b) return a; return b; } int main(void) { int x, y, z; printf("input two numbers:\n"); scanf("%d%d", &x, &y); z = max(x, y); // 呼叫 printf("maximum=%d", z); return 0; }
此處 main 內無需額外宣告 max,因定義已先於呼叫出現。
#includeint max(int a, int b); // 前置宣告 int main(void) { int x, y, z; scanf("%d%d", &x, &y); z = max(x, y); printf("maximum=%d", z); return 0; } int max(int a, int b) { // 定義在 main 後 return (a > b) ? a : b; }
| 項目 | 函數頭(定義首行) | 函數宣告 |
|---|---|---|
| 語法 | int max(int a, int b) | int max(int a, int b); |
| 結尾 | 無分號,接 { | **必須以分號結尾** |
| 用途 | 定義函數本體 | 告知編譯器型別資訊 |
int a, b → 錯誤,應為 int a, int b。void 函數寫 return 值; → 編譯錯誤。