可能重複的:
Is short-circuiting boolean operators mandated in C/C++? And evaluation order?命令,如果條件在運行時執行
考慮以下代碼:
char* str=NULL;
if(str!=NULL && str[0]=='h')
printf("ok");
驗證第一個條件是,str是不是NULL。我試圖編譯和運行這段代碼,並且我沒有得到分段錯誤。
這意味着代碼在下一條指令中斷,如果因爲不需要進一步驗證str [0]等於'h',因爲它是和。
但問題是:這是保證與所有編譯器一起工作嗎?不會發生編譯器生成的彙編代碼,出於某種原因,首先驗證str是否等於'h'(導致段錯誤),然後檢查str是否不爲NULL?
這是設計。 – Ste
如果編譯器自己調用標準C編譯器,它必須按照您的說法進行操作。如果沒有,那麼編譯器是越野車。 – pmg