将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年代的一些编译器)。谢谢各位。我很感激。很抱歉重复了这个问题。但老实说,我在搜索中找不到它。