0

我观察到很多程序员在编写条件语句时都会做这样的事情

if(NULL == Ptr){

//Some code

}

代替if(Ptr == NULL){ //some code ...

这种编码实践背后的原因是什么?我相信它无论如何都不会改变语句的含义,那么为什么要这样写呢?

如果我犯了错误,请指出我。

4

3 回答 3

4

这样做的通常原因是,如果代码被错误地写成

if(NULL = Ptr){

//Some code

}

这将是一个编译错误,而不仅仅是一个语义错误。

正如 ouah 和 Bo Persson 所指出的,这在很大程度上是不必要的,因为现代编译器已经重新集成了过去被委托给单独lint程序的大部分语义检查。

gcc -Wall -Wextra会告诉你这条线看起来很可疑:

test.c:3:2: warning: suggest parentheses around assignment used as truth value

我不像 ouah 那样认为它在语义上是错误的,比较是可交换的(即使通过减法实现并测试非零)。但它确实使代码的可读性降低,如果你打算大声朗读它,也许是给一个审查组。

If NULL is-equal-to pointer then 
    Block comment (some code) end-Block

这样读起来很有趣。然而

If pointer is-equal-to NULL ...

耳朵更顺滑。

于 2013-04-13T00:30:48.033 回答
2
if(NULL == Ptr)

相当于

if(Ptr == NULL)

因为==运算符是可交换的。NULL = Ptr这种形式的想法是如果程序员在他的意思时写错了,就会触发编译器错误NULL == Ptr

这种方法的问题是恕我直言,它使代码的可读性降低,并且在语义上不正确,因为您想要比较PtrNULL不是相反。

此外,任何启用警告的体面编译器都会触发带有if (Ptr = NULL).

于 2013-04-13T00:36:38.380 回答
0

它做同样的事情,但我觉得它令人困惑,因为要保持一致,你还需要写

 if (0 > a) 

代替

 if (a < 0)

这通常令人困惑,因为有文档或其他内容描述“a 必须小于零”,而不是“零必须大于 a”。

于 2013-04-13T00:36:34.200 回答