函數呼叫是 C 程式模組化的核心。本文系統整理函數呼叫的三種語法形式、參數求值順序陷阱、以及何時可省略函數宣告的完整規則。
| 形式 | 語法 | 說明 | 範例 |
|---|---|---|---|
| 函數運算式 | 作為運算式一項 | 需有返回值,參與運算 | z = max(x, y); |
| 函數陳述句 | 呼叫加分號 | 忽略返回值,執行副作用 | printf("%d", a); |
| 函數實參 | 作為另一函數參數 | 返回值傳遞給外層函數 | printf("%d", max(x, y)); |
#includeint main(void) { int i = 8; printf("%d %d %d %d\n", ++i, ++i, --i, --i); return 0; }
輸出:8 7 6 7
分析:VC6 採用**右至左**求值順序:
1. --i → 7(第 4 參數)
2. --i → 6(第 3 參數)
3. ++i → 7(第 2 參數)
4. ++i → 8(第 1 參數)
重要:輸出順序永遠遵循參數書寫順序(左至右),僅求值順序為右至左。標準未規定求值順序,跨編譯器不可依賴。
一般形式:
返回型別 函數名(型別 參數名, ...); // 或 返回型別 函數名(型別, ...); // 參數名可省略
int 或 char:編譯器預設為 int,直接呼叫合法(舊式 C 風格,現代建議仍显式宣告)。int max(int a,int b){...} → main() { max(1,2); } 合法。char str(int a); float f(float b);str/f。不需自行宣告,但必須 #include 對應標頭檔(<stdio.h>、<math.h> 等),標頭檔內含標準宣告。
int 規則(C99 已移除)。++i, --i 混用),行為未定義。