C 語言自上而下編譯,原則上函數定義必須出現在調用之前。但實際開發中:
main,輔助函數在後定義更符合閱讀習慣函數聲明告訴編譯器:「這個函數存在,這是它的接口信息,請先信任我,定義稍後補上」。
返回類型 函數名(參數類型列表);
long factorial(int);#include <stdio.h>
// 函數聲明(原型)
long factorial(int n); // 也可寫 long factorial(int);
long sum(long n);
int main() {
printf("1!+2!+...+10! = %ld\n", sum(10));
return 0;
}
// 定義在 main 之後
long factorial(int n) {
long result = 1;
for (int i = 1; i <= n; i++) result *= i;
return result;
}
long sum(long n) {
long result = 0;
for (int i = 1; i <= n; i++) result += factorial(i); // 嵌套調用
return result;
}
1!+2!+...+10! = 4037913
許多初學者誤以為 #include <stdio.h> 引入了函數定義(函數體)。錯誤!
| 項目 | 聲明 | 定義 |
|---|---|---|
| 關鍵字 | 無特定關鍵字(外部聲明可加 extern) | 函數體 { } |
| 次數 | 可多次(同作用域內需一致) | 全程序僅一次 |
| 分配內存 | 否 | 是(代碼段) |
| 目的 | 告知接口 | 實現功能 |