if(expr)無論 ``expr" 是任何表達式, 編譯器本質上都會把它當
if((expr) != 0)處理。
如果用指針 p 代替 ``expr" 則
if(p) 等價於 if(p != 0)。而這是一個比較上下文, 因此編譯器可以看出 0 實際上是一個空指針常數, 並使用正確的空指針值。這裡沒有任何欺騙; 編譯器就是這樣工作的, 並為、 二者生成完全一樣的代碼。空指針的內部表達無關緊要。
布爾否操作符 ! 可如下描述:
!expr | 本質上等價於 | (expr)?0:1 |
或等價於 | ((expr) == 0) |
if(!p) | 等價於 | if(p == 0) |
參見問題 9.2。
參考資料: [K&R2, Sec. A7.4.7 p. 204]; [ISO, Sec. 6.3.3.3, Sec. 6.3.9, Sec. 6.3.13, Sec. 6.3.14, Sec. 6.3.15, Sec. 6.6.4.1, Sec. 6.6.5]; [H&S, Sec. 5.3.2 p. 122]。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)