if 是 C 語言構建分支結構的核心語句,提供三種基本形式,支援從簡單二選一到複雜多路分派。本文系統整理語法、語意、嵌套規則與工程實踐建議。
if (expr) stmt;
expr 非 0 → 執行 stmt。
max = a;
if (max < b) max = b;
if (expr) stmt1; else stmt2;
stmt1,假走 stmt2。
if (a > b) printf("%d", a);
else printf("%d", b);
if (expr1) stmt1;
else if (expr2) stmt2;
else if (expr3) stmt3;
...
else stmt_n;
else。
if (c < 32) printf("控制字符\n");
else if (c >= '0' && c <= '9') printf("數字\n");
else if (c >= 'A' && c <= 'Z') printf("大寫字母\n");
else if (c >= 'a' && c <= 'z') printf("小寫字母\n");
else printf("其他字符\n");
if (a = 5) ... // 永真,賦值結果 5 非零
if (b) ... // 變數本身作條件,非零即真
if (a = b) ... // 賦值後以結果判斷,常用於「賦值並檢查」
if (a > b) printf("%d", a); // 正確
if a > b printf(...); // 錯誤:缺括號
if (a > b) {
a++;
b++;
} else {
a = 0;
b = 10;
} // } 後不加分號
if (expr1)
if (expr2) stmt1;
else stmt2; // else 配對內層 if(expr2)
若欲配對外層,必須加大括號:
if (expr1) {
if (expr2) stmt1;
} else stmt2; // else 配對外層 if(expr1)
if (a != b)
if (a > b) printf("A>B\n");
else printf("A<B\n");
else printf("A=B\n");
if (a == b) printf("A=B\n");
else if (a > b) printf("A>B\n");
else printf("A<B\n");
扁平結構更易讀,避免 else 配對歧義。
| 原則 | 說明 |
|---|---|
| 淺層優於深層 | 嵌套超過 3 層即重構為 if-else-if 或函式 |
| 衛語句提前返回 | 錯誤情況先 return,主流程不縮排 |
| 布林變數命名肯定語意 | if (isValid) 優於 if (!invalid) |
| 複雜條件提煉函式 | if (isLeapYear(year)) 代替 inline 邏輯 |
| switch 替代長鏈 | 整數定值分支用 switch,O(1) 跳轉表更快 |
if 三大形式覆蓋所有分支需求。牢記大括號包多語句、else 配最近 if、扁平化優於嵌套三大鐵律,能寫出結構清晰、邏輯正確的分支代碼。