我刚刚在 C 中遇到了一个我非常喜欢的 DEBUG 宏
#ifdef DEBUG_BUILD
# define DEBUG(x) fprintf(stderr, x)
#else
# define DEBUG(x) do {} while (0)
#endif
我猜 C++ 类似物是:-
#ifdef DEBUG_BUILD
# define DEBUG(x) cerr << x
#else
# define DEBUG(x) do {} while (0)
#endif
- 第二个代码片段是否类似于 C 中的代码片段?
- 你有最喜欢的 C++ 调试宏吗?
编辑:“调试宏”是指“在调试模式下运行程序时可能派上用场的宏”。
原文由 user277465 发布,翻译遵循 CC BY-SA 4.0 许可协议
第二个代码片段是否类似于 C 中的代码片段?
或多或少。它更强大,因为您可以在参数中包含
<<
值,因此使用单个参数您会得到需要在 C 中使用可变数量的宏参数的东西。另一方面,有人们通过在参数中包含分号来滥用它的可能性很小。甚至会因为调用后忘记分号而遇到错误。所以我会把它包含在一个 do 块中:你有最喜欢的 C++ 调试宏吗?
我喜欢上面的那个并且经常使用它。我的无操作通常只是阅读
这对于优化编译器具有相同的效果。尽管下面@Tony D 的评论是正确的:这可能会导致一些语法错误未被检测到。
我有时也包括运行时检查,从而提供某种形式的调试标志。正如@Tony D 提醒我的那样,里面有一个 endl 通常也很有用。
有时我还想打印表达式:
在某些宏中,我喜欢包含
__FILE__
、__LINE__
或__func__
,但这些通常是断言而不是简单的调试宏。