c++ - 从可执行文件中删除调试“标志”的 C++ 方法
问题描述
我正在构建比以前更大的 C++ 代码库。我需要良好的日志记录和调试,至少在控制台上,还需要速度。
一般来说,我喜欢做这样的事情
// Some header file
bool DEBUG = true;
然后在其他文件中
if (DEBUG) cout << "Some debugging information" << endl;
这个问题(除其他外)是分支降低了最终可执行文件的速度。为了解决这个问题,我必须在最后进入文件并删除所有这些文件,然后如果不将它们保存到其他文件然后将它们放回原处,我将无法再次使用它们。
解决这个难题的最有效解决方案是什么?Python 装饰器提供了一种我不确定 CPP 中是否存在的好方法。
谢谢!
解决方案
经典的方法是使它DEBUG
不是一个变量,而是一个预处理器宏。然后您可以进行两种构建:一种将宏定义为1
,另一种将其定义为0
(或根本未定义,具体取决于您打算如何使用它)。然后您可以#ifdef
完全删除编译器看到的调试代码,或者只是将其放入常规if
中,优化器将负责删除带有常量条件的分支。
推荐阅读
- python - 如何在python中将字符串映射为整数
- sql - 当另一个表中的两列匹配时,如何更新一个表中的单个列?
- php - PHP中的“and”关键字和if(TRUE)一样吗
- c++ - 遍历地图向量
- python - 访问代码时出现 Python 搜索引擎错误
- tensorflow - AttributeError:“list”对象没有属性“model_dir”
- javascript - 将详细信息传递给模态时 id 未定义
- animation - 容器高度动画从中间开始
- node.js - 在nodejs脚本中从shell命令运行casperjs代码时出错
- php - 如果第二个表不匹配连接条件,laravel 从第一个表中获取结果