我有一个带字段的类,我输出到日志。如果关闭日志(例如在发布中),我有警告(不使用私有字段'a_'),因为我只使用此字段输出到日志。
样品:
#include <iostream>
//#define TURNON_LOG
#ifdef TURNON_LOG
#define LOG(a) printf("%d", a)
#else
#define LOG(a) 0
#endif
class A
{
public:
A(int a) : a_(a)
{
LOG(a_);
}
private:
int a_;
};
int main(int argc, const char * argv[])
{
A a(10);
return 0;
}
我和-Wall使用了clang:
clang main.cpp -Wall
在未定义TURNON_LOG的情况下修复警告的最佳方法是什么?
答案 0 :(得分:2)
#define LOG(a) ((void)a)
#else
案例中的应该可以解决问题。
小警告:即使禁用了日志记录,也会始终评估参数表达式。如果表达式只是一个变量,那无关紧要,但对于函数调用等,它可能会。
答案 1 :(得分:2)
除了Baum mit Augen的答案之外,对于Clang(或任何C ++ 17或更高版本的编译器),您可以使用[[maybe_unused]]
属性来消除特定可能未使用的变量的警告。
class A
{
public:
A(int a) : a_(a)
{
LOG(a_);
}
private:
[[maybe_unused]] int a_;
};
答案 2 :(得分:1)
对已经提供的解决方案的另一个解决方案是#ifdef以及相关部分。
绝对不是一个好的解决方案,根本不能扩展,但可以在某些和有限的情况下做到这一点:
class A
{
public:
#ifdef TURNON_LOG
A(int a) : a_(a)
{
LOG(a_);
}
private:
int a_;
#else
A(int) {}
#endif
};
int main(int argc, const char * argv[])
{
A a(10);
return 0;
}