将c中的条件语句写成(value==variable)而不是(variable==value)

将c中的条件语句写成(value==variable)而不是(variable==value),c,coding-style,C,Coding Style,我观察到很多程序员在编写条件语句时都会这样做 if(NULL == Ptr){ //Some code } 而不是if(Ptr==NULL){//some code… 这种编码实践背后的原因是什么?我相信它无论如何都不会改变语句的含义,那么为什么要这样写呢 请指出我是否犯了错误。通常这样做的原因是,如果代码被错误地写成 if(NULL = Ptr){ //Some code } 这将是一个编译错误,而不仅仅是语义错误 正如ouah和Bo Persson所指出的,这在很大程度上是不必要

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

if(NULL == Ptr){

//Some code

}
而不是
if(Ptr==NULL){//some code…

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


请指出我是否犯了错误。

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

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
<> P>我不认为它与UAH有语义上的错误,比较是可交换的(即使是用减法和非零检验实现的)。但是如果你想大声朗读它,它可能会使代码变得不可读,也许是一个复习小组。

If NULL is-equal-to pointer then 
    Block comment (some code) end-Block
这样读起来很有趣

If pointer is-equal-to NULL ...

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

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
<> P>我不认为它与UAH有语义上的错误,比较是可交换的(即使是用减法和非零检验实现的)。但是如果你想大声朗读它,它可能会使代码变得不可读,也许是一个复习小组。

If NULL is-equal-to pointer then 
    Block comment (some code) end-Block
这样读起来很有趣

If pointer is-equal-to NULL ...

耳朵更光滑。

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

 if (0 > a) 
而不是

 if (a < 0)
if(a<0)

这常常令人困惑,因为有一个文档或东西描述“a必须小于零”,而不是“零必须大于a”。

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

 if (0 > a) 
而不是

 if (a < 0)
if(a<0)
这常常令人困惑,因为有一个文档或东西描述“a必须小于零”,而不是“零必须大于a”

相当于

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

这种方法的问题在于,它会降低代码的可读性,并且在语义上不正确,因为您希望将
Ptr
NULL
进行比较,而不是相反

此外,任何启用了警告的体面编译器都会在(Ptr=NULL)的情况下触发警告

相当于

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

这种方法的问题在于,它会降低代码的可读性,并且在语义上不正确,因为您希望将
Ptr
NULL
进行比较,而不是相反


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

的警告,问题是编译器会以任何一种方式告诉您这个问题(与20世纪80年代的某些编译器不同)谢谢各位。我很感激。很抱歉重复了这个问题。但老实说,我在搜索中找不到它。问题是编译器会以任何方式告诉你们这个问题(不同于1980年代的一些编译器)。谢谢各位。我很感激。很抱歉重复了这个问题。但老实说,我在搜索中找不到它。