首页 > 解决方案 > 来自调试代码的未使用变量警告

问题描述

我已经构建了一个在两个平台上编译的日志系统:

1) 日志调用在代码中交错的调试平台。

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

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

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

唉,未使用的变量编译器警告让我很难过。例如下面的代码在调试平台编译,在线平台编译不出来:

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

我想让用户从思考这些问题中解放出来,并采取一些技巧来避免警告(比如添加(void)a)。大多数用户不编译在线平台,这些类型的错误会在追溯时发现,并会造成很多不便。

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

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

标签: c++macroscompiler-warnings

解决方案


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

#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会使编译器忽略它没有被使用。

如果您放置更多宏版本,您可以记录更多变量,但这会很混乱。With#log和 with (void) log,你不能再传"a: " << a递给LOG


推荐阅读