一:C标准库中的 assert() 会粗暴地结束程序
assert()在发布版(release)的程序中被编译为空语句,它仅存在于调试版(debug)的程序中,它的意图很明显,就是及时提醒开发者注意程序中的非正常情况,并辅助开发者排除这种非正常情况,使程序逐步趋于完善。一般来说,一个assert()断言失败,必然是程序的运行状态超出了程序员的预期,或程序流程进入到目前代码尚未处理的一个分枝。在这种情况下,程序员要找出问题的根源并改进程序,就需要对assert()上下文进行分析。此时继续向下单步执行几句代码,可以搜集更多的信息,有助于更及时的解决问题。可是“微软公司提供的”C标准库的assert()呢?断言失败后,程序并没有中断在调用assert()的那一行代码处,而是中断在C运行库内部,而且程序马上就要中止。以前用习惯了MFC中的 ASSERT(),它在断言失败后允许用户选择中止程序、忽略断言、中断(可以继续执行),对程序员非常友好。现在用回C标准库中的assert(),有点不能适应。解决方案是,可以自己写一个 my_assert(),代码如下: assert()在发布版(rel