C++中的assert用法

assert用法

void assert(int expression);

C++中assert,即断言,可以在程序调试阶段检查错误,常用的就比如函数传参时,若是整型,是否超出范围;若是字符串型,地址是否为空等。
在正常时,程序可以照常执行,如果出现超过范围或空地址时,就可以报错提示。这里的提示是我们写入assert的参数表达式,只不过assert将这个表达式发送给了标准输出文件。

assert的执行是判断expression是否为假,只有在表达式为假时,才会调用abort报警。

		int a;
		char str[50];

		printf("请输入一个整数值: ");
		cin >> a;
		assert(("a必须大于10", a > 10));
		printf("输入的整数是: %d\n", a);

		printf("请输入字符串: ");
		cin >> str;
		assert(str != NULL);
		printf("输入的字符串是: %s\n", str);

如果我们需要在判断某个条件时,额外加一些提示语,可以使用上面第一个assert处的方式,即

assert(("a必须大于10", a > 10));
或者
assert(a > 10 && "a必须大于10");

结果如下图:
在这里插入图片描述

assert注意事项

1)在函数开始处检查传入参数的合法性;
2)每个assert只检验一个条件,同时检验多个条件时,若断言失败,无法直接定位错误;
3)不能使用改变环境的语句,因为assert仅在debug阶段生效,如果这么做,会使程序在真正运行时出错;
4)assert和后面的语句空一行,以形成视觉上的一致感;
5)有的地方,assert不能代替条件过滤;

assert使用原则

1)使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
2)使用assert对函数参数进行确认。

assert禁止使用

assert 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。
如果不想使用assert了,可以在#include语句之前,插入#define NDEBUG,就可以禁用assert了。

参考阅读

断言(assert)的用法
assert
What is the “assert” function?

发布了57 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43343803/article/details/103251575