C ++宏导致:“警告:未使用的变量“LOG__METHOD__”“

Posted

技术标签:

【中文标题】C ++宏导致:“警告:未使用的变量“LOG__METHOD__”“【英文标题】:C++ Macro causing :"warning: unused variable "LOG__METHOD__" " 【发布时间】:2015-04-15 07:30:10 【问题描述】:

我的 C++ 代码中有一个宏,宏有一个未使用的变量。我收到该变量的警告 宏是打印类和方法名

#define LOG_ENTER(func_name, message)                                      \
    LOG_SET_METHOD(#func_name)                                             \
    LOG_MOD_INTERNAL(TC_TAG(ENTER) << message)
#define LOG_SET_METHOD(name) static const char LOG__METHOD__[] = "::" name "() ";

我们使用的是 gcc 版本 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)。

“警告:未使用的变量“LOG__METHOD__”“

如何抑制这个警告?它会引起更多噪音!

【问题讨论】:

在您的问题中显示宏以及您如何使用它。并包括工具链信息。警告禁用对于所使用的工具经常变化无常。 第三个答案:***.com/questions/15053776/… 可能会有所帮助 未使用的变量的用途是什么? 【参考方案1】:

消除此警告的常用方法是在虚拟表达式中使用变量:

int main() 
    int i;
    i;

但是,这会触发“警告:语句无效”,因为i 没有副作用并且它的值未被使用。为了让这个静音,我们明确地忽略了这个值:

int main() 
    int i;
    (void)i;

然后就是警告了。

【讨论】:

这是一个 hack (恕我直言),编译器属性将是一个更清晰、更干净的解决方案(gcc 的 __attribute__((unused)))。 @Otomo 好吧,它是 the standard way to do it。而且语法不能被误认为是其他任何东西。无需求助于编译器魔法。 有时很高兴看到 C++ 设置了如此低的关于什么是语句的阈值。【参考方案2】:

一种禁用警告的方法:

template <typename T>
void UnusedVar(const T&) 

然后使用:

UnusedVar(my_var);

转换为void 也是一种常用方式(但不适用于所有编译器):

(void) my_var; // or static_cast<void>(my_var)

【讨论】:

以上是关于C ++宏导致:“警告:未使用的变量“LOG__METHOD__”“的主要内容,如果未能解决你的问题,请参考以下文章

c语言 如何打印函数指针名

C/C++ 宏操作小技巧

C/C++中的__FILE____LINE__#line__func__关键字(预定义宏)

CMake C / C ++宏生成[重复]

使用 ## 和 __LINE__ 创建 C 宏(与定位宏的标记连接)

C语言中的__attribute__宏定义之section属性