我不知道是否總是會編譯下面的代碼,以便不存在非法的NULL ptr解引用?如果邏輯運算優先級的評估爲C組合
我的問題是編譯器可能會在首先檢查「b」是否爲NULL之前檢查b->值。
typedef struct
{
int value;
} mystruct;
int func(mystruct * b)
{
if((NULL == b) || (b->value == 0))
{
return -1;
}
printf("value: %d\n", b->value);
}
可能重複的[如果括號中的語句的評估順序如果(...)?](http://stackoverflow.com/questions/18450585/what-is-the-order-of-評價-的語句-IN-A-IF-托架-IF)。簡短的回答,'||'從左到右評估並將短路,細節在dup列出。應該更加小心,這是一個C的問題,這是一個[更好的重複](http://stackoverflow.com/questions/628526/is-short-circuiting-boolean-operators-mandated-in-cc-and-評估順序) –