Joh*_*n U 6 c assert coding-style
我刚刚在我们正在处理的一些代码中挖出了一个错误*由于以下情况而失败:
Assert(SomeVitalFunction(foo) == OK)
Run Code Online (Sandbox Code Playgroud)
DEBUG宏#defined一直都很好用:
#ifdef DEBUG
#define Assert(x) if((x) == 0){/*some error handling*/}
#else
#define Assert(x)
#endif
Run Code Online (Sandbox Code Playgroud)
但是当#undef'd DEBUG它们具有从代码中删除重要函数调用的效果时.
我不能为我的生活弄清楚它是如何与DEBUG一起工作的#undef,并且通常将任何类型的函数调用放在这样的断言中似乎是一个坏主意.
我错过了什么吗?
*= 编辑以澄清以下Carpetsmoker的评论:代码来自一个特别落后的Elbonian代码奴隶的阴谋,我们的任务是破解,削减,刮胡子,擦亮,消毒和涂抹口红.
你没有错过什么.
始终应该写入断言,好像它们可以在编译器开关的轻弹中消失.
您可以调用在断言内完成相对较长时间的函数(例如,分析数据结构的完整性),因为函数调用不会出现在发布版本中.另一方面,您无法调用正确操作所需的功能.