系統講解 C 語言條件判斷語法、執行流程、常見陷阱與最佳實踐,構建清晰分支邏輯思維。
if (condition) statement;
if (condition) stmt1; else stmt2;
if (age >= 18)
puts("成年");
else if (age > 4)
puts("兒童");
else
puts("幼兒");
關鍵:else 總與最近的未匹配 if 配對,大括號消除歧義。
switch (expr) {
case 1: puts("一"); break;
case 2: puts("二"); break;
case 3: puts("三"); break;
default: puts("其他"); break;
}
expr 必須為整型/字符/枚舉case 標籤必須為常量表達式break 繼續執行下一 casedefault 可放任意位置,建議最後
max = (a > b) ? a : b;
// 等價於
if (a > b) max = a; else max = b;
適用於簡單賦值/返回值場景,嵌套使用降低可讀性。
| 優先級 | 運算符 | 結合性 | 說明 |
|---|---|---|---|
| 1 (最高) | () [] -> . | 左→右 | 基本運算符 |
| 2 | ! ~ ++ -- + - * & sizeof | 右→左 | 一元運算符 |
| 3 | * / % | 左→右 | 乘除模 |
| 4 | + - | 左→右 | 加減 |
| 5 | << >> | 左→右 | 移位 |
| 6 | < <= > >= | 左→右 | 關係運算 |
| 7 | == != | 左→右 | 相等性 |
| 8 | & | 左→右 | 按位與 |
| 9 | ^ | 左→右 | 按位異或 |
| 10 | | | 左→右 | 按位或 |
| 11 | && | 左→右 | 邏輯與 |
| 12 | || | 左→右 | 邏輯或 |
| 13 | ?: | 右→左 | 條件運算符 |
| 14 | = += -= ... | 右→左 | 賦值 |
| 15 (最低) | , | 左→右 | 逗號運算符 |
| 陷阱 | 錯誤代碼 | 正確代碼 | 說明 |
|---|---|---|---|
| 賦值代比較 | if (a = 5) | if (a == 5) | = 返回值參與判斷 |
| 邏輯短路 | if (p && *p) | if (p != NULL && *p) | p 為 NULL 時不解引用 |
| switch 貫穿 | case 1: ... case 2: ... | case 1: ... break; | 需顯式 break |
| 浮點比較 | if (f == 0.0) | if (fabs(f) < EPS) | 精度誤差 |
default: assert(0)清晰的分支邏輯是代碼可讀性與正確性的基石。