0

我试过尽可能地搜索文档和互联网,但是我一直无法让Xcode编译器在if语句中使用赋值运算符时发出警告。如何让Xcode 3.1编译器在if语句中警告赋值运算符?

我是从REALbasic的,在那里我有键入这种比较的一个极强的习惯来:

if x = 5 then ... 

在C,当然,这句法分配的x 5个,然后测试值看到的结果,如果是非零和“正确”的操作是:

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

我已经发现了几个提到,编译器应该能够发出警告,如果有,如果比较在做的任务,但我在Xcode 3.1/gcc中找不到如何打开它。我发现-pedantic选项,但似乎没有产生警告。

由于我已经花了相当多的时间两次,现在追踪错误,结果是“=”而不是“==”,我想要一个警告的帮助。

我知道我能做到这一点,而不是(这将导致一个编译器错误):

if (5 = x) { ... } 

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

谢谢!

回答

1

的链接ennuikiller的答案选项确实引起了我所需要的。

这里的任何人提供更多的信息谁在将来可能会发现这样的:

  • 的编译器警告是“缺少大括号和括号”,或-Wparentheses。

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

  • 正如我终于发现,iPhone模拟器SDK确实不是显示 这个编译器选项。

  • 将SDK切换到iPhone设备将显示GCC 4.2警告 部分,其中包括“缺少 括号和括号”。

  • 打开在iPhone设备SDK该选项,切换回 到Similator后表明, “用户自定义”构建设置已经 补充说: GCC_WARN_MISSING_PARENTHESES = “YES”。

  • 如果在if语句中真的需要赋值,则可以使用括号的两倍来避免警告。

(双括号示例:)

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

警告就像一个魅力,但它确实不喜欢苹果的标准:

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

我可能会离开这些原样是,但是如果我在项目中结束了大量的工作,我可以将括号加倍或者将工作分解为单独的一行。

谢谢!

+0

该标志对我不起作用。我有这样的代码:'if(newlyCreated = true){goToLastElement = true; }'虽然该标志已启用,但xcode/g ++不会发出警告。 (注意:C++代码) – 2011-02-24 18:12:54

+0

我刚发现它不适用于'bool'变量:/ – 2011-02-24 18:16:16

1

您正在寻找我认为的-Wall选项。

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