设为首页 加入收藏

TOP

c语言之assert的使用
2015-01-22 20:56:29 来源: 作者: 【 】 浏览:12
Tags:语言 assert 使用

assert



作用



程序中关键的地方可以通过assert这个宏来断言。如果断言非真,程序停止,标准错误输出一条具体的错误信息。
但在实战中,程序直接停止是很不好的现象,因此断言只在调试程序使用。
\





\






NDEBUG宏



为了在调试中方便使用assert,而在不需要时容易停掉assert的工作,于是有了NDEBUG宏来规定assert的行为。如果定义了这个宏,assert不会起作用。

#ifdef NDEBUG
#define assert(x) ((void)0)
#else
...


\





头文件的特性


assert.h头文件和别的头文件不同,不具有幂等性。
幂等性就是包含该文件一次到多次,效果相同。


但assert.h文件包含多次,却不一定相同。
\
一开始就取消了原有的 assert宏的定义

因此打开断言要写成 #undef NDEBUG #include
关闭断言要写成 #define NDEBUG #include



测试


#include 
    
     
#include 
     
       #define NDEBUG #include 
      
        void t1(void) { int i = 0; assert(i == 0); assert(i == 1); } #undef NDEBUG #include 
       
         void t2(void) { int j = 0; assert(j == 0); assert(j == 1); } #define NDEBUG #include 
        
          int main(void) { int i = 1; assert(i == 0); t1(); printf("hello world\n"); t2(); }
        
       
      
     
    


t1函数开始时,取消了断言,因此执行t1不会停止。 t2函数开始时,实行了断言,因此最后t2会停止在 j==1句时。 main函数虽然断言为假,但开始时取消了断言,因此不会停止。



输出结果为:











】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言指针教程----入门到精通(二) 下一篇objective c - 单例模式(多线程)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: