哪种方法是最好的抑制“未使用变量”警告?

17

我知道有三种方法可以抑制“未使用的变量”警告。哪种方法更好?

第一种方法

- (void)testString:(NSString *)testString
{
     (void)testString;
}

第二

- (void)testString:(NSString *)__unused testString
{

}

第三

- (void)testString:(NSString *)testString
{
    #pragma unused(testString)
}

9
这是一个编程语言选项,表示禁止显示未使用的变量警告信息。 - user529758
4
删除或注释未使用的部分。 - Lee Meador
6
将变量转换为void是最具可移植性和更符合惯用方式的方法。 - ouah
8
还有#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" <#未使用的变量#> #pragma clang diagnostic pop - jscs
6
-Wno-unused-variable非常不专业。这就像是砸掉警告你没有系安全带的小扬声器,而不是系上安全带。将变量转换为void是惯用语,并且在任何编译器中都是有效的代码。 - gnasher729
显示剩余5条评论
3个回答

8
这是我使用的方法:跨平台宏用于消除未使用变量警告
它允许您在任何平台上使用一个宏(尽管定义可能因编译器而异),因此它是一种非常便携的方法,可以向基于C语言的流行编译器表达您的意图。在GCC和Clang上,它等同于将第三个示例(#pragma unused(testString))包装到宏中。
使用链接答案中的示例:
- (void)testString:(NSString *)testString
{
    MONUnusedParameter(testString);
}

我发现这种方法最适合可移植性和清晰度,与一些相当大的C、C++、ObjC和ObjC++代码库配合使用。

1
我喜欢这个想法。 我讨厌左缩进 #pragma,通过这样做,我们也可以解决那个问题。 - AAV

7

如果你正在使用GCC编译,你可以利用属性扩展来设置"unused"属性。像这样:

int somevar __attribute__((unused));

它还适用于未使用参数警告 (-Wunused-parameter)。

为了使写作更短,我正在使用此宏:

#define _U_ __attribute__((unused))

并像这样声明:

int somevar _U_ ;

2
以下划线开头,后跟大写字母的标识符是保留的。 - Sapphire_Brick

-9

一种方法是在声明变量后无意义地分配一个变量,例如:

int foo;
foo = 0;

这应该可以抑制未使用变量的警告。这只是一个无意义的赋值。
但除此之外,如果你必须从这三个中选择一个,我会同意ouah的看法,第一种方法是最可靠的。


3
为了消除警告,你不应该分配比你需要的更多的内存。 - Ozgur Vatansever
2
这很可能会让以后阅读你代码的人感到困惑。 - bdesham
3
GCC 会发出警告,提示已经设置了但未被使用。 - OLL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接