0

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

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

if x = 5 then ...

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

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

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

由于我现在已经花了相当多的时间两次来追踪结果是“=”而不是“==”的错误,所以我希望得到警告的帮助。

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

if (5 = x) { ... }

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

谢谢!

4

2 回答 2

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

链接描述了如何通过 Xcode GUI 启用选项

于 2009-09-10T14:44:46.200 回答
1

ennukiller 的答案中的链接确实导致了我所需要的。

对于将来可能会发现此内容的任何人,这里有更多信息:

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

  • 通过为 Xcode 中的当前目标选择 Get Info 来打开警告。

  • 我终于发现,iPhone Simulator SDK没有显示这个编译器选项。

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

  • 在 iPhone 设备 SDK 中打开该选项后,切换回 Simulator 显示已添加“用户定义”构建设置: GCC_WARN_MISSING_PARENTHESES=“是”。

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

(双括号示例:)

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

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

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

我可能会保持原样,但如果我最终在一个项目中使用了大量的它们,我要么加倍括号,要么将作业分成单独的一行。

谢谢!

于 2009-09-10T15:47:05.993 回答