【问题标题】:Disappear debug code in release code C++ [duplicate]在发布代码C++中消失调试代码[重复]
【发布时间】:2015-06-04 13:39:29
【问题描述】:

如标题所示,我的基本目标是在编译前扩展时,在发布代码中删除调试代码。目前,我使用_Debug(或自定义名称)宏来保护调试行,它工作得很好。

但是,我不想为每个函数/操作调用编写每个处理器的保护,就像在 C++ 调试文件中编写一样。

编辑:感谢您的回复,如果我可以创建宏功能来保护自己,同时像这样:DBG_PRINT(fname,msg)\ #ifdef _Debug\ fprintf(fname, msg)\ #endif

请给我建议一些干净且单线的出路。

感谢和快乐编码

【问题讨论】:

  • 在 Release 版本中将 _Debug 宏定义为空。
  • 如果没有定义的守卫,你将如何定义“调试线”?
  • @AlexM.: 是的——将“调试行”本身设为宏。
  • 感谢Debug macro.. 链接。我得到了那个问题的答案:供其他人参考:#ifdef _DEBUG #define D(x) x #else #define D(x) #endif 这将在发布中扩展为空,并且在调试中可以正常工作:)。跨度>

标签: c++ c c-preprocessor


【解决方案1】:

预处理器指令是执行此操作的唯一方法,如果将调试调用包装在具有 ifdefined 主体的通用方法中,则可以清理代码并避免 ifdef 调试在代码中的任何位置放置,但没有无需宏或预处理器检查的方法。

【讨论】:

  • "如果您将调试调用包装在具有 ifdefined 主体的通用方法中" 该函数仍将被链接(但可能在有空主体时优化)。
  • @πάντα ῥεῖ 当然,但是如果将代码包装在方法中而不是使用宏,则代码更具可读性和安全性,特别是如果您有一个非常大的项目。实际上,宏中的编译错误令人头疼。
  • 问题是,这样的函数可能需要返回一个用于链接的值(例如,使用重载的operator<<(),)。因此,您不能完全让他们空空如也。
猜你喜欢
  • 2018-06-29
  • 2011-03-19
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多