首页 > 代码库 > c语言之assert的使用
c语言之assert的使用
assert
作用
程序中关键的地方可以通过assert这个宏来断言。如果断言非真,程序停止,标准错误输出一条具体的错误信息。
但在实战中,程序直接停止是很不好的现象,因此断言只在调试程序使用。
NDEBUG宏
为了在调试中方便使用assert,而在不需要时容易停掉assert的工作,于是有了NDEBUG宏来规定assert的行为。如果定义了这个宏,assert不会起作用。
#ifdef NDEBUG
#define assert(x) ((void)0)
#else
...
#define assert(x) ((void)0)
#else
...
头文件的特性
assert.h头文件和别的头文件不同,不具有幂等性。
幂等性就是包含该文件一次到多次,效果相同。
但assert.h文件包含多次,却不一定相同。
一开始就取消了原有的 assert宏的定义
因此打开断言要写成
#undef NDEBUG
#include<assert.h>
关闭断言要写成
#define NDEBUG
#include<assert.h>
测试
#include <stdio.h> #include <stdlib.h> #define NDEBUG #include <assert.h> void t1(void) { int i = 0; assert(i == 0); assert(i == 1); } #undef NDEBUG #include <assert.h> void t2(void) { int j = 0; assert(j == 0); assert(j == 1); } #define NDEBUG #include <assert.h> int main(void) { int i = 1; assert(i == 0); t1(); printf("hello world\n"); t2(); }
t1函数开始时,取消了断言,因此执行t1不会停止。
t2函数开始时,实行了断言,因此最后t2会停止在 j==1句时。
main函数虽然断言为假,但开始时取消了断言,因此不会停止。
输出结果为:
c语言之assert的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。