&& (邏輯與):左側為假(0) → 短路,右側**不執行**。
|| (邏輯或):左側為真(非0) → 短路,右側**不執行**。
#include <stdio.h>
int main() {
int i=0, a=1, b=2, c=3, d=4;
// i = a++ && ++b && d++; // 全執行:a=2,b=3,d=5,i=1
i = a++ || ++b || d++; // a++ 為 1(真) → 短路,b/d 不執行
printf("a=%d b=%d c=%d d=%d i=%d\n", a,b,c,d,i);
// 輸出:a=2 b=2 c=3 d=4 i=1
return 0;
}
a++ 先取值 1 (真),a 變 2。|| 見真短路,**++b 和 d++ 完全不執行**,b 仍為 2,d 仍為 4。i。// 安全檢查:指針非空才解引用
if (ptr && ptr->valid) { ... }
// 鏈式賦值/初始化
config = get_config() || default_config(); // 前者失敗才調用後者
**不要在 &&/|| 右側放置有副作用的操作**(如 ++、函數調用、賦值),除非明確利用短路特性。否則代碼行為極難預測與維護。