【博客37】合理使用assert,避免出现 "你意向不到的结果"

内容: 今天记录一下assert断言,它可以用来检测一些不合理的情况,它会停掉程序,打印错误信息,在调试的时候会挺好用的,但是如果把它当做你程序的核心判断来依赖它,则有些时候是不妥的,因为程序的逻辑判断一定需要,但是assert不是永远都发挥作用的。

情况一:使用assert
在这里插入图片描述
在这里插入图片描述
分析:当我需要打印地址的时候,我可以使用一个assert来过滤当输入是空指针的情况。这时候如果传入是空指针,那么assert会触发,停掉程序,打印出错信息。

情况二:同样的例子,但是由于我已经测试完毕,所以关掉DEBUG,因为我已经调试完了,打算关掉之前为了测试而加入的assert,这时候问题就出现了

在这里插入图片描述
在这里插入图片描述
分析:由于NDEBUG使得assert不生效,所以你的程序少了逻辑判断,对错误的输入没有采取其他有效措施,而是打印出了错误的信息。这是你不愿意看到的。但是这是有可能发生的,因为当有多个函数你在测试,你有时忘记了某个函数的非法输入判断是由assert来作的,关掉后不生效,你需要补上判断语句才能像以前正常工作。

建议: 非法输入和边界判断尽量的判断需要成为程序的一部分,而不是用assert这种有时生效有时不生效的机制来判断。因为assert可能被预处理过程清除,当使用这个宏的时候必须确信条件表达式不存在副作用

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。

猜你喜欢

转载自blog.csdn.net/qq_43684922/article/details/89677260