修复警告"field a is not used"如果字段在配置中未使用的好方法



我有一个带字段的类,我输出它来记录。如果日志被关闭(例如在发布中(,我有警告(不使用私有字段"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?

除了 Baum mit Augen 的答案之外,对于 Clang(或任何 C++17 或更高版本的编译器(,您可以使用 [[maybe_unused]] 属性来静音特定可能未使用的变量的警告。

class A
{
public:
    A(int a) : a_(a)
    {
        LOG(a_);
    }
private:
    [[maybe_unused]] int a_;
};
#define  LOG(a) ((void)a)

#else的情况下应该可以解决问题。

小警告:这将始终计算参数表达式,即使禁用日志记录也是如此。如果表达式只是一个变量,那无关紧要,但对于函数调用等,它可能。

对已经提供的解决方案的另一个解决方案是 #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;
}

相关内容

  • 没有找到相关文章

最新更新