在C語言中,函數是實現模組化程式設計的核心機制,類似於C#或Java中的方法。掌握函數的聲明、定義與調用,是編寫結構清晰、可維護代碼的關鍵。本文將系統梳理函數的語法細節、參數傳遞機制、返回值處理以及變量作用域等核心概念。
一個完整的函數包含函數原型聲明、函數定義與函數調用三個部分。
函數原型聲明告訴編譯器函數的名稱、返回類型及參數列表,使編譯器能在調用前進行類型檢查。其語法為:返回類型 函數名(參數類型1, 參數類型2, ...);。參數名稱在聲明中可省略,但類型不可缺失。
// 函數原型聲明:無返回值,接受兩個整型參數 void sum(int begin, int end);
函數定義包含函數頭與函數體,實現具體邏輯。
void sum(int begin, int end) {
int i;
int sum = 0;
for(i = begin; i <= end; i++) {
sum += i;
}
printf("%d到%d的和是%d", begin, end, sum);
}
void sum(int begin, int end),包含返回類型(void表示無返回值)、函數名(sum)、參數列表(int begin, int end)。調用時需提供實參,實參將按順序初始化形參。若函數有返回值,可通過return 表達式;返回;若為void,可用return;或省略return。建議函數採用單一出口原則,避免多處return增加維護難度。
sum(10, 15); // 調用函數,計算10到15的和
C語言採用值傳遞:調用時將實參的值複製給形參,函數內部對形參的修改不影響實參。若需修改實參,需傳遞指針。
注意:實參數量、類型必須與形參匹配,否則編譯器會嘗試隱式轉換,可能導致非預期行為。
變量定義在區塊(由花括號{}包圍的代碼區域,如函數體、if語句塊)內稱為局部變量。
以下三種聲明在功能上等價,均表示接受一個int參數、無返回值的函數:
void d(int x); // 參數帶名稱 void d(); // 空參數列表(舊式寫法,不推薦,無法檢查參數) void d(int); // 參數僅保留類型
推薦使用第一種或第三種,便於代碼閱讀與類型檢查。
const限定。通過合理拆分函數,配合.h頭文件聲明與.c源文件實現分離,可構建清晰的模組化架構,這正是C語言工程化開發的基石。