2016-10-01 32 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),以及你的暗示,我不能没有拐杖走路。 –

相关问题