代码之家  ›  专栏  ›  技术社区  ›  Rob

如何让Xcode3.1编译器在if语句中警告赋值运算符?

  •  0
  • Rob  · 技术社区  · 15 年前

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

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

    if x = 5 then ...
    

    当然,在C语言中,该语法将x的值赋给5,然后测试结果,看它是否为非零,“correct”操作符是:

    if (x == 5) { ... }
    

    我发现有几处提到,如果在if比较中进行了赋值,编译器应该能够发出警告,但是在xcode 3.1/gcc中找不到如何打开它。我找到了 -pedantic 选项,但这似乎没有生成警告。

    因为我已经花了两次时间来追踪那些原来是“=”而不是“=”的bug,所以我希望得到警告的帮助。

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

    if (5 = x) { ... }
    

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

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Glen    15 年前

    我想你在找墙的选择。

    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
    

    这个 link 描述如何通过Xcode GUI启用选项

        2
  •  1
  •   Rob    15 年前

    恩努伊基勒的答案中的联系确实导致了我需要的东西。

    以下是将来可能会发现这一点的任何人的更多信息:

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

    • 通过选择“获取当前信息”打开警告。 Xcode中的目标。

    • 正如我最终发现的,iPhone Simulator SDK 显示 此编译器选项。

    • 将sdk切换到iphone设备将显示gcc 4.2警告 部分,其中包括“缺少” 大括号和圆括号”。

    • 在iPhone设备SDK中打开该选项后,切换回 对这个比喻来说 “用户定义”生成设置已 补充: GCC_WARN_MISSING_PARENTHESES = “是的”。

    • 如果在if语句中确实需要赋值,则可以 将圆括号加两倍以避免出现警告。

    (双括号示例:)

    if ((x = 5)) { ... }
    

    这个警告就像一个魅力,尽管它不喜欢苹果的标准:

    if (self = [super init]) { ... }
    

    我可能会保持原样,但是如果我在一个项目中得到了大量的结果,我要么把括号翻一番,要么把作业分成一行。

    谢谢!