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++中的__FILE____LINE__#line__func__关键字(预定义宏)