如何让Xcode 3.1编译器在if语句中警告赋值运算符?

如何让Xcode 3.1编译器在if语句中警告赋值运算符?,xcode,compiler-construction,if-statement,assignment-operator,Xcode,Compiler Construction,If Statement,Assignment Operator,我已经尽我所能搜索了文档和互联网,但是我没有能够让Xcode编译器在if语句中使用赋值运算符时发出警告 我来自RealBasic,在那里我有一个非常强烈的习惯键入这种比较: if x = 5 then ... 当然,在C中,该语法将x赋值为5,然后测试结果是否为非零,“正确”运算符为: if (x == 5) { ... } 我发现有几处提到编译器应该能够在if比较中警告是否有赋值,但我找不到如何在Xcode 3.1/gcc中打开它。我找到了-pedantic选项,但似乎没有产生警告 由于我

我已经尽我所能搜索了文档和互联网,但是我没有能够让Xcode编译器在if语句中使用赋值运算符时发出警告

我来自RealBasic,在那里我有一个非常强烈的习惯键入这种比较:

if x = 5 then ...
当然,在C中,该语法将x赋值为5,然后测试结果是否为非零,“正确”运算符为:

if (x == 5) { ... }
我发现有几处提到编译器应该能够在if比较中警告是否有赋值,但我找不到如何在Xcode 3.1/gcc中打开它。我找到了
-pedantic
选项,但似乎没有产生警告

由于我已经花了相当多的时间两次跟踪那些原来是“=”而不是“=”的bug,我希望得到一个警告的帮助

我知道我可以这样做(这将导致编译器错误):

…但这也需要改变根深蒂固的编码习惯。更不用说它看起来笨拙落后了


谢谢

我想你是在寻找一种选择

int main(void) {

    int x = 5;
    if ( x=5) { 
    }
    return 0;
  }

$ g++ -pedantic x.cc 
$ g++ -Wall x.cc 
x.cc: In function ‘int main()’:
x.cc:7: warning: suggest parentheses around assignment used as truth value

这描述了如何通过Xcode GUI启用选项。ennuikiller答案中的链接确实提供了我需要的内容

这里有更多的信息供将来可能会发现这一点的人参考:

  • 编译器警告为“缺少大括号和圆括号”,或-wParenthes

  • 选择“获取当前文件的信息”将打开警告 Xcode中的目标

  • 正如我最后发现的,iPhone Simulator SDK没有显示 此编译器选项无效

  • 将SDK切换到iPhone设备将显示GCC 4.2警告 第节,其中包括“缺失” 大括号和圆括号”

  • 在iPhone设备SDK中打开该选项后,切换回 与之相似的是,a “用户定义的”生成设置已更改 补充:
    GCC\u警告\u缺少括号
    = “是的”

  • 如果在If语句中确实需要赋值,则可以 双括号以避免出现警告

(双括号示例:)

这个警告很有魅力,尽管它不喜欢苹果的标准:

if (self = [super init]) { ... }
我可能会让它们保持原样,不过如果我在一个项目中有大量的它们,我会将括号加倍,或者将作业分成单独的一行


谢谢

那面旗子对我不起作用。我有这样的代码:
if(newlyCreated=true){goToLastElement=true;}
并且尽管该标志已启用,但xcode/g++不会发出警告。(注释:C++代码)
if ((x = 5)) { ... }
if (self = [super init]) { ... }