如何摆脱Xcode中的“未使用的变量”警告?

时间:2011-03-27 17:57:42

标签: objective-c xcode compiler-warnings unused-variables

我完全理解为什么会发生未使用的变量警告。我不想一般地压制它们,因为它们在大多数情况下非常有用。但是,请考虑以下(人为的)代码。

NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);

Xcode报告saved是一个未使用的变量,当然不是。我怀疑这是因为NSAssert1是一个宏。 NS_BLOCK_ASSERTIONS宏未定义 ,因此明确启用了Objective C断言。

虽然它没有伤害任何东西,但我发现它不整洁且烦人,我想压制它,但我不知道该怎么做。将变量分配给自己可以消除编译器警告,但如果存在这样的事情,我宁愿以“正确”的方式进行。

10 个答案:

答案 0 :(得分:101)

我不确定新的LLVM编译器是否仍然支持它,但是GCC有一个“未使用”属性可用于抑制该警告:

BOOL saved __attribute__((unused)) = [moc save:&error];

或者(如果LLVM不支持上述内容),您可以将变量声明拆分为单独的行,保证变量将被“使用”,无论宏是否扩展:

BOOL saved = NO;
saved = [moc save:&error];

答案 1 :(得分:99)

使用Xcode 4.3.2并发现这似乎有效(写作少)

BOOL saved __unused;

答案 2 :(得分:35)

在Xcode中,您可以设置“未使用的变量”的警告。转到目标的“构建设置”,并使用“未使用”一词过滤

以下是截图:Builld Settings Screenshot

我建议你只为Debug更改它。这样您就不会错过发布版本中的任何内容。

答案 3 :(得分:21)

NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
#pragma unused(saved)

试试这样。 它对我有用。它也适合你。

答案 4 :(得分:14)

将变量标记为使用它的唯一简单且可移植的方法是......使用它。

BOOL saved = ...;
(void)saved; // now used

但您可能对已经描述的特定于编译器的扩展感到满意。

答案 5 :(得分:8)

尝试使用:__ unused属性。适用于Xcode 5

答案 6 :(得分:8)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
    NSUInteger abc; /// Your unused variable
#pragma clang diagnostic pop

SOURCE

答案 7 :(得分:4)

您可以在“发布”enter image description here

上设置“否” LLVM compliler 2.0警告

答案 8 :(得分:3)

这是你在C中的方式,因此也是Objective-C。

即使您没有启用警告,将返回值标记为明确忽略也是一个好主意。它也向其他开发人员展示,你不仅忘记了返回值 - 你确实明确选择忽略它。

(void)[moc save:&error];

编辑:编译器忽略对void的强制转换,因此它不应影响性能 - 它只是一个很好的干净的人类注释。

答案 9 :(得分:1)

让它占用两行。分隔声明和默认值

BOOL enabled = NO;

// ...

BOOL enabled;

enabled = NO;