檢查檔案是否實際打開的這兩個版本之間有什么區別:
FILE *file = fopen(fname, "rb");
if (!file)
{
exit(1);
}
和
FILE *file = fopen(fname, "rb");
if (file == NULL)
{
exit(1);
}
uj5u.com熱心網友回復:
這兩者是等價的。
邏輯 NOT 運算子!在C 標準的第 6.5.3.3p5 節中定義如下:
!如果其運算元的值比較不等于 0,則邏輯否定運算子的結果為 0,如果其運算元的值比較等于 0,則結??果為 1。結果的型別為int。 運算式!E等價于(0==E)
所以!file是一樣的0 == file。值 0 被視為空指標常量,在 6.3.2.3p3 節中定義:
值為 0 的整數常量運算式,或轉換為 type 的此類運算式
void *,稱為空指標常量。66) 如果將空指標常量轉換為指標型別,則結果指標(稱為空指標)保證與指向任何物件或函式的指標進行比較不相等66 ) 宏
NULL在 <stddef.h>(和其他頭檔案)中定義為空指標常量;見 7.19
這意味著將指標與 0 進行比較與將其與 進行比較是相同的NULL。所以!file和file == NULL是一樣的。
uj5u.com熱心網友回復:
https://github.com/gcc-mirror/gcc/blob/master/gcc/ginclude/stddef.h
<stddef.h> 將 NULL 定義為字面上的 0。
使 C 中的條件陳述句成為“真”的原因是它不是 0。就是這樣。
該!運算子將非零值轉換為 0,將 0 值轉換為 1。==如果運算元相等,則該運算子回傳 1,否則回傳 0。
你的兩個陳述在邏輯上是等價的。(可能)唯一的區別是風格或個人喜好。您可能會發現查看已編譯的程式集以進行更深入的挖掘很有趣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382500.html
下一篇:在xml檔案中追加字串
