代碼 if (g==a || g==b || g==c || g==d || g==e || g==f) {++g;} 語法完全正確。任一條件為真,整個表達式值為 1(真),執行 ++g。但需理解短路求值特性對副作用的影響。
||(邏輯或):左操作數為真 → 直接返回 1,不計算右操作數。&&(邏輯與):左操作數為假 → 直接返回 0,不計算右操作數。
int x = 0, y = 0;
if (x++ || y++) { /* ... */ }
// 結果:x=1, y=0 (短路,y++ 未執行)
int a = 1, b = 0;
if (a-- && b++) { /* ... */ }
// 結果:a=0, b=1 (左真,計算右)
最佳實踐:邏輯判斷表達式中嚴禁包含副作用操作(賦值、自增/減、函數調用修改狀態)。先計算賦值,再判斷:
// 正確模式
int cond1 = (g == a);
int cond2 = (g == b);
// ...
if (cond1 || cond2 || ...) { ... }
int targets[] = {a, b, c, d, e, f};
int found = 0;
for (int i = 0; i < 6; i++)
if (g == targets[i]) { found = 1; break; }
if (found) ++g;
// 假設 a-f 為 0-9 之間
unsigned int mask = (1u<
switch (g) {
case a: case b: case c: case d: case e: case f:
++g; break;
}
|| 多條件鏈接寫法正確且常用,邏輯清晰。