這是什麼之間的區別:if(varName)和if(varName!= NULL)有什麼區別?
if(varName != NULL){
// Do something
}
和:
if(varName){
// Do something
}
我的意思是,是否有在處理速度方面有區別嗎?或者只是一個更好的表現?
PD:我與C.
這是什麼之間的區別:if(varName)和if(varName!= NULL)有什麼區別?
if(varName != NULL){
// Do something
}
和:
if(varName){
// Do something
}
我的意思是,是否有在處理速度方面有區別嗎?或者只是一個更好的表現?
PD:我與C.
沒有在性能的情況下沒有區別的工作,但意圖的差異可能是顯著。假設NULL
宏定義爲(void *) 0
,此代碼:
if(varName != NULL) {
// Do something
}
強制執行varName
必須是指針對象。例如,下面的代碼將發出一個錯誤信息:
int varName = 0;
if (varName != NULL) {
// Do something
}
error: comparison between pointer and integer
因此,這種做法可能被視爲排序防禦式編程的,但它的價值,而分析討論,因爲這兩種形式都是一樣的地道。
它確實使代碼更具可讀性。在查看代碼時,如果您看到與NULL的比較,則知道類型是指針而不是整型,而不會查找變量的聲明。 –
@天氣風向標:一個可疑的好處,有點類似於投射'malloc'結果的習慣。後者的支持者也經常聲稱,它可以幫助他們「不知道聲明就知道類型」。實際上,「知道類型」是C開發人員經常需要「走路」的一個諺語。我會說好的編程實踐需要類型不可知的代碼。是的,即使是在C.它更可讀。開發人員只需要學習閱讀和理解這種類型不可知的代碼,而不必依賴於確切的類型信息,必須學會走路而不用柺杖。 – AnT
@你的類比鑄造'malloc'並不完全相同。這是一個[稻草人論點](https://en.wikipedia.org/wiki/Straw_man),以及你的暗示,我不能沒有柺杖走路。 –
沒有區別 –
回答這個問題的最好方法是用'-S'選項編譯,然後查看生成的程序集。優化關閉後,可能會有所不同,但啓用優化後,彙編代碼應該是相同的。 – user3386109
這是一個有趣的問題,我喜歡'if(varName!= NULL)'。有些人喜歡'if(varName)',並且你做了一些我覺得很糟糕的事情,如果(_something_)''''''是一個白色空間看起來很糟糕。無論如何,這個問題應該關閉。 –