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

问题描述 投票:0回答:2

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

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

if x = 5 then ...

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

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

我发现有几处提到编译器应该能够警告 if 比较中是否有赋值,但我找不到如何在 Xcode 3.1/gcc 中打开它。我找到了

-pedantic
选项,但这似乎没有生成警告。

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

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

if (5 = x) { ... }

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

谢谢!

xcode if-statement compiler-warnings assignment-operator
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 启用选项


1
投票

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

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

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

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

  • 我最终发现,iPhone Simulator SDK 确实显示 这个编译器选项。

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

  • 在 iPhone Device SDK 中打开该选项后,切换回来 向模拟器表明 “用户定义”构建设置已 额外:

    GCC_WARN_MISSING_PARENTHESES
    = “是”。

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

(双括号示例:)

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

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

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

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

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.