assert里面的函数调用==坏?

我刚刚在我们正在处理的一些代码中挖出了一个错误*由于以下情况而失败:
Assert(SomeVitalFunction(foo) == OK)

DEBUG宏#defined一直都很好用:

#ifdef DEBUG
    #define Assert(x)  if((x) == 0){/*some error handling*/}
#else
    #define Assert(x)
#endif

但是当我们#undef’d DEBUG时,它具有从代码删除重要函数调用效果.

我不能为我的生活弄清楚如何使用DEBUG#undef’d,并且通常在这样的断言中放置任何类型的函数调用似乎是个坏主意.

我错过了什么吗?

* =编辑以澄清以下Carpetsmoker的评论代码来自一个特别落后的Elbonian代码奴隶的阴谋,我们的任务是破解,削减,刮胡子,擦亮,消毒和涂抹口红.

解决方法

你没有错过什么.

始终应该写入断言,好像它们可以在编译器开关的轻弹中消失.

您可以调用在断言内完成相对较长时间的函数(例如,分析数据结构的完整性),因为函数调用不会出现在发布版本中.另一方面,您无法调用正确操作所需的功能.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...