Gre*_*ley 96 xcode objective-c compiler-warnings unused-variables
我完全理解为什么会出现未使用的变量警告.我不想一般地压制它们,因为它们在大多数情况下非常有用.但是,请考虑以下(人为)代码.
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
Run Code Online (Sandbox Code Playgroud)
Xcode报告这saved是一个未使用的变量,当然它不是.我怀疑这是因为NSAssert1是一个宏.该NS_BLOCK_ASSERTIONS是宏没有定义,那么目标C断言肯定启用.
虽然它没有伤害任何东西,但我发现它不整洁且烦人,我想压制它,但我不知道该怎么做.将变量分配给自己可以摆脱编译器警告,但如果存在这样的事情,我宁愿以"正确"的方式进行.
She*_*ley 107
我不确定新的LLVM编译器是否仍然支持它,但是GCC有一个"未使用"属性可用于抑制该警告:
BOOL saved __attribute__((unused)) = [moc save:&error];
Run Code Online (Sandbox Code Playgroud)
或者(在LLVM不支持上述情况的情况下),您可以将变量声明拆分为单独的行,保证变量将被"使用",无论宏是否扩展:
BOOL saved = NO;
saved = [moc save:&error];
Run Code Online (Sandbox Code Playgroud)
JOM*_*JOM 103
使用Xcode 4.3.2并发现这似乎有效(写作较少)
BOOL saved __unused;
Run Code Online (Sandbox Code Playgroud)
Bla*_*rog 37
在Xcode中,您可以设置"未使用的变量"的警告.转到目标的"构建设置",并使用"未使用"一词进行过滤
这是一个截图: 
我建议你只为Debug更改它.这样您就不会错过发布版本中的任何内容.
Dan*_* Xu 21
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
#pragma unused(saved)
Run Code Online (Sandbox Code Playgroud)
试试这样吧.它对我有用.它也适合你.
use*_*367 14
将变量标记为使用的唯一简单且可移植的方法是......使用它.
BOOL saved = ...;
(void)saved; // now used
Run Code Online (Sandbox Code Playgroud)
但是,您可能对已经描述的特定于编译器的扩展感到满意.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
NSUInteger abc; /// Your unused variable
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)
这是您在 C 中执行的方式,因此也是 Objective-C。
即使您没有启用警告,将返回值标记为显式忽略总是一个好主意。它还向其他开发人员表明,您不仅忘记了返回值——您确实明确选择了忽略它。
(void)[moc save:&error];
Run Code Online (Sandbox Code Playgroud)
编辑:编译器忽略强制转换为void,所以它不应该影响性能——它只是一个很好的干净的人工注释。