首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C/C++ 中 `NULL == p` 與 `p == NULL` 的區別:Yoda 條件風格

     編輯:程式設計綜合問答

結論

邏輯語義完全相同,編譯器生成的機器碼無差異。區別僅在於**編碼風格與防錯目的**。

Yoda Conditions(尤達條件)

if (NULL == p)   // 常量在左
if (p == NULL)   // 變量在左

歷史動機

早期 C 編譯器對 `if (p = NULL)`(誤寫賦值為判斷)僅給出警告而非報錯。寫成 `if (NULL = p)` 則會直接**編譯錯誤**(常量不可賦值),從而在編譯期捕獲拼寫錯誤。

現代環境

  • 主流編譯器(GCC/Clang/MSVC)在高警告級別(`-Wall -Wextra` / `/W4`)下會對賦值判斷發出**強制錯誤**或強烈警告。
  • 靜態分析工具能可靠檢測此類問題。
  • 可讀性:`p == NULL` 符合自然語言習慣,現代主流風格指南(Google, LLVM, Linux Kernel)均推薦變量在左。

建議

**統一團隊風格即可**。若維護舊代碼庫已采用 Yoda 風格,保持一致;新項目推薦 `p == NULL` 並開啟高警告級別 + 靜態分析。

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