在if语句中分配的警告?

时间:2012-11-05 07:38:40

标签: objective-c xcode

当我分配变量而不是检查相等时,有没有办法得到警告?有很多次我不小心分配,而不是比较,并且发出警告会很棒!

有没有办法Xcode可以警告我,而不必将编码样式更改为:

if (YES == aVariable) {...}

2 个答案:

答案 0 :(得分:8)

在大多数情况下,如果您在=声明中使用==而不是if,则Xcode已经发出警告。如果您没有收到警告,请告诉我们您正在使用的Xcode版本,项目的年龄以及您从默认设置更改的构建设置。

我的测试:我在Xcode 4.5.2中创建了一个全新的iOS应用程序,并没有更改任何构建设置。我刚刚向application:didFinishLaunchingWithOptions:添加了一些代码来触发警告。这是:

Using the result of an assignment as a condition without parentheses

您可以通过设置编译器的-Wno-parentheses标志来禁用警告(但为什么要这样做?)。您可以通过在作业周围添加一组额外的括号来抑制特定情况下的警告:

if ((x = 7)) {

有两种情况,默认情况下您没有收到警告。首先,在init方法中,您可以分配到self,如下所示:

- (id)init {
    if (self = [super init]) {     // no warning by default
    ...

其次,在任何上下文中,您都可以分配nextObject选择器的结果,如下所示:

while (object = [enumerator nextObject]) {    // no warning by default

您可以通过设置编译器的-Widiomatic-parentheses标志来启用警告。

答案 1 :(得分:1)

编译器标志Wparentheses应该可以解决问题。它会强制您在条件中围绕赋值放置括号以进行编译。 Clang默认设置了这个标志。