这是什么之间的区别: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_)''''''是一个白色空间看起来很糟糕。无论如何,这个问题应该关闭。 –