【问题标题】:Which is the best way to suppress "unused variable" warning这是抑制“未使用变量”警告的最佳方法
【发布时间】:2013-07-11 10:16:57
【问题描述】:

有 3 种(我知道)方法可以抑制“未使用的变量”警告。有什么特别的方式比其他方式更好吗?

第一个

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

第二

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

}

第三

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

【问题讨论】:

  • -Wno-unused-variable
  • 删除或注释掉不用的部分。
  • 第一个,投射到void 是最便携和更惯用的方式。
  • 还有#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" <#unused variables#> #pragma clang diagnostic pop
  • -Wno-unused-variable 非常不专业。这就像在不系安全带而不是系上安全带的情况下,砸碎了提醒您的小扬声器。强制转换为 void 是惯用的,它是每个编译器上的有效代码。

标签: ios objective-c c clang


【解决方案1】:

这是我使用的方法:cross platform macro for silencing unused variables warning

它允许您将一个宏用于任何平台(尽管定义可能会有所不同,具体取决于编译器),因此它是一种非常可移植的方法,可以向基于 C 语言的流行编译器表达您的意图。在 GCC 和 Clang 上,这相当于将您的第三个示例 (#pragma unused(testString)) 包装到一个宏中。

使用链接答案中的示例:

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

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

【讨论】:

  • 我喜欢这个主意。我讨厌左缩进 #pragma 通过这样做我们也可以解决这个问题。
【解决方案2】:

如果您使用 GCC 进行编译,您可以利用属性扩展来设置“未使用”属性。像这样:

int somevar __attribute__((unused));

它也适用于未使用的参数警告(-Wunused-parameter)

为了缩短编写时间,我使用了这个宏:

#define _U_ __attribute__((unused))

并像这样声明:

int somevar _U_ ;

【讨论】:

  • 保留以“_”开头后跟大写字母的标识符。
【解决方案3】:

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

int foo;
foo = 0;

这应该抑制未使用的变量警告。这只是一个毫无意义的任务。
但否则我会同意 ouah,第一种方法是最可靠的,如果你必须从这三个中选择的话。

【讨论】:

  • 你不应该分配比你需要更多的内存来抑制警告。
  • 这可能会让以后阅读您的代码的人感到困惑。
  • GCC 还会警告它已设置但未使用。
猜你喜欢
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2022-09-27
相关资源
最近更新 更多