在if条件下检测"="而不是"=="错字

Neo*_*hus 3 c++ if-statement g++

如果我在c ++中使用if =而不是==if条件,有没有办法让g ++产生编译错误?我已经做了几次这个错字,跟踪是很烦人的.那是:

if (x=5){ //bad - sets x equal to 5
   //do something
}    
Run Code Online (Sandbox Code Playgroud)

P.P*_*.P. 6

-Wparentheses选项专门警告这种情况,这也是-Wall选项的一部分.

来自gcc文档:

-Wparentheses

如果在某些上下文中省略括号,则会发出警告,例如在预期真值的上下文中存在赋值,或者当嵌套运算符时,优先级通常会让人感到困惑.

...

如果存在这种混淆的可能性,GCC将在指定此标志时发出警告.要消除警告,请在最里面的if语句周围添加显式括号,这样else就不会属于封闭if.

通过指定可以转换为错误-Werror=parentheses.

注意

if(x=5) {...}
Run Code Online (Sandbox Code Playgroud)

是合法的,标准不需要这样的诊断.但是允许实现提供任何数量的此类有用警告.

  • @MarkLakata这取决于.有时你不能比`while((bytes = read(fd,buffer,buffer_size))> = 0)`更具可读性.您可以通过使用一些辅助函数来删除赋值,但在这种情况下,实际上会降低可读性.规则总是有例外. (2认同)