程式設計的核心公式是「程式 = 資料 + 演算法」。在 C 語言中,這演變為「C 程式 = 資料 + 函數」。函數是將演算法封裝、重複使用的基本單元,也是 C 語言實現模組化程式設計的關鍵機制。


模組化將複雜問題分解為獨立、可管理的函數模組,每個模組完成特定任務,再透過介面組合成完整程式。這不僅提高程式碼可讀性與維護性,也促進團隊協作與程式碼重用。
C 語言是典型的面向過程語言,其核心思想是「以過程為中心」。程式設計者先將複雜問題分解為一系列可解決的步驟(函數),再按順序呼叫執行。以下示範全域變數、函數宣告與定義的典型結構:
// global.c
#include
int g_var = 0; // 全域變數
extern int g_var; // 外部宣告
void f(int i, int j); // 函數原型宣告
int main() {
int g(int x); // 函數原型宣告(區域)
g_var = 10;
f(1, 2);
printf("%d\n", g(3));
return 0;
}
void f(int i, int j) { // 函數定義
printf("i + j = %d\n", i + j);
}
int g(int x) {
return 2 * x + g_var;
}
參數本質: 函數參數在本質上屬於區域變數,均在堆疊上分配空間。參數的初始值來自呼叫時的實際引數。

實參求值順序: C 標準未規定函數實參的求值順序,完全取決於編譯器實作。例如:
int f(int i, int j) { printf("%d, %d\n", i, j); }
int main() {
int k = 1;
f(k, k++); // 輸出結果視編譯器而定
printf("%d\n", k);
return 0;
}
同樣地,int i = f() * g(); 中 f() 與 g() 的呼叫順序也不固定。切勿盲目假設左邊先算。
順序點是程式執行中「變數值修改必須反映到後續存取」的關鍵節點。主要順序點包括:
&&、||、?:、逗號運算子的運算元計算之後範例驗證:
#include
int main() {
int k = 2, a = 1;
k = k++ + k++; // 未定義行為,無順序點約束
printf("k = %d\n", k); // 結果不可預期
if (a-- && a) { // && 為順序點,a 先遞減再判斷
printf("a = %d\n", a);
}
return 0;
}
早期 C 語言允許省略參數與回傳型別,預設為 int:
f(i, j) { return i + j; } // 等價於 int f(int i, int j) { return i + j; }
現代 C 標準(C99 起)已移除此特性,建議明確宣告型別。
int。