我已尽力搜索文档和互联网,但如果在 if 语句中使用赋值运算符,我无法让 Xcode 编译器发出警告。
我来自 RealBasic,在那里我有一个非常强烈的习惯,就是输入这种比较:
if x = 5 then ...
当然,在 C 语言中,该语法将 x 的值赋为 5,然后测试结果以查看它是否非零,“正确”运算符是:
if (x == 5) { ... }
我发现有几处提到编译器应该能够警告 if 比较中是否有赋值,但我找不到如何在 Xcode 3.1/gcc 中打开它。我找到了
-pedantic
选项,但这似乎没有生成警告。
由于我已经花了相当多的时间两次追踪错误,结果发现是“=”而不是“==”,所以我需要警告的帮助。
我知道我可以这样做(这会导致编译器错误):
if (5 = x) { ... }
...但这也需要改变根深蒂固的编码习惯。更不用说它看起来笨拙落后。
谢谢!
我认为您正在寻找 -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 启用选项
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]) { ... }
我可能会保留这些原样,但如果我最终在一个项目中包含大量它们,我要么将括号加倍,要么将作业分成单独的行。
谢谢!