首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言邏輯運算符短路求值:&& 與 || 的副作用差異實測

     編輯:關於C語言

C語言邏輯運算符短路求值:&& 與 || 的副作用差異實測

&& (邏輯與):左側為假(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。
  • 整個表達式值為 1 (真),賦給 i。

工程應用

// 安全檢查:指針非空才解引用
if (ptr && ptr->valid) { ... }

// 鏈式賦值/初始化
config = get_config() || default_config(); // 前者失敗才調用後者

避坑提醒

**不要在 &&/|| 右側放置有副作用的操作**(如 ++、函數調用、賦值),除非明確利用短路特性。否則代碼行為極難預測與維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved