调试代码中未使用的变量警告

时间:2019-04-09 05:42:28

标签: c++ macros compiler-warnings

我建立了一个可以在两个平台上编译的日志记录系统:

1)一个调试平台,在该平台中,日志调用被插入到代码中。

2)一个片上平台,由于对代码大小和运行时间的严格限制,不应在代码中出现日志记录调用。

为了实现我的目标,我使用了C宏:

#ifdef DEBUG_PLATFORM
#define LOG(log)  std::sstream s; s<<log; log_func(s);
#else
#define LOG(log)  ;
#endif

A,未使用的变量编译器警告使我很难受。例如,以下代码将在调试平台中编译,但不会在在线平台中编译:

int a = 5;
int b = func(1,2,3);
LOG("a: "<<a<<" b: "<< b)

我希望用户摆脱对这些问题的思考,并采取一些技巧来避免警告(例如添加(void)a)。大多数用户不编译在线平台,这些类型的错误将被追溯发现,并且会带来很多不便。

我不允许更改编译器标志,必须使用未使用的变量警告。

有人知道如何克服这个困难吗? 有没有一种方法可以指示编译器忽略某个范围内所有变量的警告?

1 个答案:

答案 0 :(得分:1)

我建议您一次记录一个变量:

#ifdef DEBUG_PLATFORM
#define LOG(log)  { std::stringstream s; s<< #log << '=' << log << ' '; log_func(s); }
#else
#define LOG(log) (void) log;
#endif

#log将打印变量名称。

(void) log将使编译器忽略未使用它。

如果您放置了更多的宏版本,则可以记录更多的变量,但这会很麻烦。使用#log(void) log,您将无法再将"a: " << a传递给LOG