C 語言依據函數能否被其他原始檔呼叫,分為內部函數(靜態函數)與外部函數。善用它們能實現模組封裝、避免名稱衝突。
在函數定義前加 static:
static int max(int a, int b) {
return a > b ? a : b;
}
private 方法。static 函數,互不干擾,利於大型專案模組化。預設即為外部函數,可顯式加 extern(通常省略):
extern int fun(int a, int b) { ... } // 等同於 int fun(int a, int b) { ... }
extern 宣告函數原型:extern int fun(int, int);。// file1.c
static void internalHelper() { ... } // 僅本檔可用
void publicAPI() { internalHelper(); }
// file2.c
extern void publicAPI(); // 宣告
void useIt() { publicAPI(); } // 正確
// internalHelper(); // 錯誤:未宣告且不可見
| 特性 | 內部函數 | 外部函數 |
|---|---|---|
| 關鍵字 | static | extern (可省略) |
| 可見範圍 | 僅定義所在檔案 | 整個專案(需宣告) |
| 名稱衝突 | 不同檔案可同名 | 全專案唯一 |
| 用途 | 模組內部實現細節 | 對外公開介面 |
static。.h 中僅放 extern 宣告(可省略 extern),.c 實現並加 static 修飾內部函數。