2016-10-01 61 views
-1

這是什麼之間的區別:if(varName)和if(varName!= NULL)有什麼區別?

if(varName != NULL){ 
    // Do something 
} 

和:

if(varName){ 
// Do something 
} 

我的意思是,是否有在處理速度方面有區別嗎?或者只是一個更好的表現?

PD:我與C.

+6

沒有區別 –

+1

回答這個問題的最好方法是用'-S'選項編譯,然後查看生成的程序集。優化關閉後,可能會有所不同,但啓用優化後,彙編代碼應該是相同的。 – user3386109

+0

這是一個有趣的問題,我喜歡'if(varName!= NULL)'。有些人喜歡'if(varName)',並且你做了一些我覺得很糟糕的事情,如果(_something_)''''''是一個白色空間看起來很糟糕。無論如何,這個問題應該關閉。 –

回答

3

沒有在性能的情況下沒有區別的工作,但意圖的差異可能是顯著。假設NULL宏定義爲(void *) 0,此代碼:

if(varName != NULL) { 
    // Do something 
} 

強制執行varName必須是指針對象。例如,下面的代碼將發出一個錯誤信息:

int varName = 0; 
if (varName != NULL) { 
    // Do something 
} 

error: comparison between pointer and integer

因此,這種做法可能被視爲排序防禦式編程的,但它的價值,而分析討論,因爲這兩種形式都是一樣的地道。

+2

它確實使代碼更具可讀性。在查看代碼時,如果您看到與NULL的比較,則知道類型是指針而不是整型,而不會查找變量的聲明。 –

+1

@天氣風向標:一個可疑的好處,有點類似於投射'malloc'結果的習慣。後者的支持者也經常聲稱,它可以幫助他們「不知道聲明就知道類型」。實際上,「知道類型」是C開發人員經常需要「走路」的一個諺語。我會說好的編程實踐需要類型不可知的代碼。是的,即使是在C.它更可讀。開發人員只需要學習閱讀和理解這種類型不可知的代碼,而不必依賴於確切的類型信息,必須學會走路而不用柺杖。 – AnT

+1

@你的類比鑄造'malloc'並不完全相同。這是一個[稻草人論點](https://en.wikipedia.org/wiki/Straw_man),以及你的暗示,我不能沒有柺杖走路。 –

相關問題