提问人:Rob 提问时间:9/10/2009 更新时间:9/10/2009 访问量:835
如何让 Xcode 3.1 编译器在 if 语句中警告赋值运算符?
How to have the Xcode 3.1 compiler warn of assignment operator in an if statement?
问:
我已经尝试尽可能地搜索文档和互联网,但是如果在 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 启用选项
ennuikiller 回答中的链接确实导致了我需要的东西。
对于将来可能会发现此内容的任何人,这里有一些更多信息:
编译器警告为“缺少大括号和括号”或 -Wparentheses。
通过选择当前 Xcode 中的目标。
正如我最终发现的那样,iPhone Simulator SDK没有显示 此编译器选项。
将 SDK 切换到 iPhone 设备将显示 GCC 4.2 警告 部分,其中包括“缺失 大括号和括号”。
在 iPhone 设备 SDK 中打开该选项后,切换回去 到 Similator 显示 “用户定义”构建设置已被 添加:= “是的”。
GCC_WARN_MISSING_PARENTHESES
如果确实需要在 if 语句中赋值,则可以 将括号加倍以避免警告。
(双括号示例:)
if ((x = 5)) { ... }
这个警告就像一个魅力,尽管它确实不喜欢苹果的标准:
if (self = [super init]) { ... }
我可能会保持原样,但如果我最终在一个项目中有大量的它们,我要么将括号加倍,要么将任务分解为单独的一行。
谢谢!
评论
if (newlyCreated = true) { goToLastElement = true; }
评论