【问题标题】:Unused parameter warning未使用的参数警告
【发布时间】:2013-07-07 12:23:39
【问题描述】:

我从以下代码中收到“未使用的参数 'testString'”警告。但我正在使用 testString 来记录。那么它怎么没用呢?

- (void)getString:(NSString *)testString {
          ICELogInfo(@"%@", testString);
}

ICELogInfo 是 NSLog 的宏。

#define ICELogInfo(fmt, ...) LOG_FORMAT(fmt, @"INFO", ##__VA_ARGS__)
#define LOG_FORMAT(fmt, lvl, ...) LOG_FORMAT_NO_LOCATION(fmt, lvl, ##__VA_ARGS__)
#define LOG_FORMAT_NO_LOCATION(fmt, lvl, ...) NSLog((@"%@ " fmt), lvl, ##__VA_ARGS__)

我做错了什么?

【问题讨论】:

  • 当你运行它并出现警告时它会记录什么?
  • 它将记录“INFO ”。记录部分工作正常。我对输出没有任何问题。就是那个警告。
  • 难道ICELogInfo在非DEBUG的情况下被定义为“无”?
  • @AmitVyawahare:可能是上面的定义只在#ifdef DEBUG的情况下使用,否则ICELogInfo被定义为一个空宏。

标签: ios objective-c xcode macros clang


【解决方案1】:

你没有做错什么。这是使用宏时的常见问题。

如果您想摆脱警告,作为一种解决方法,您可以使用以下代码:

- (void)getString:(NSSTring*) __unused testString {
          ICELogInfo(@"%@", testString);
}

【讨论】:

  • 谢谢,这是一个很好的解决方法,但我正在寻找原因?
【解决方案2】:

我以前也遇到过同样的“问题”。通过使用unused 标志解决它,例如

- (void)getString:(NSString *)testString {
    ICELogInfo(@"%@", testString);
    #pragma unused (testString)
}

【讨论】:

  • 谢谢你,这也是一个很好的解决方法,但我正在寻找为什么?
【解决方案3】:

您使用的是哪个版本的 Xcode?这看起来像是一年多前 LLVM 中的 lambda 捕获错误:

[LLVMbugs] [Bug 12153] New: Incorrect warning about unused parameter when using capturing variadic parameter in lambda

因为这些宏中的 VA_ARGS 有望解决该错误报告中描述的相同问题;但它应该在最近的 Xcode 中得到解决。绝对是我现在正在运行的 Xcode 5 DP 3,你的代码没有给我任何警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 2017-07-17
    • 2015-06-24
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多