c++ - 来自调试代码的未使用变量警告
问题描述
我已经构建了一个在两个平台上编译的日志系统:
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)。大多数用户不编译在线平台,这些类型的错误会在追溯时发现,并会造成很多不便。
我不允许更改编译器标志,必须使用未使用的变量警告。
有人知道如何克服这个困难吗?有没有办法指示编译器忽略某个范围内所有变量的警告?
解决方案
我建议您一次记录一个变量:
#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
推荐阅读
- symfony4 - 如何查看小黄瓜的版本?
- hive - 单列值到配置单元中的多列
- api-platform.com - 由转换器创建的 Api Platform DTO 对象没有被持久化
- php - 如何在 laravel 中从 facebook 获取大头像图像
- java - 如何在Java中将十进制时间戳转换为带有尾随小数的日期
- c# - 如何转换列表
进入列表 我可以将一个转换
List<string[]>
成一个List<int[]>
吗?还是我必须将字符串数组转换为 int 数组,然后将其放入这样的新列表中?
List<string[]> arrayStringList = new List<string[]>(
- jquery - 剑道内联编辑干扰,如果网格中的另一行已经处于编辑模式,则在编辑一行时
- jquery - 尝试设置类时无法重新初始化 DataTable 错误
- r - Rstudio 中的 ROracle 性能问题
- java - Spring 安全性阻止输出请求。连接超时