abort(),exit()和assert()

abort(),exit()和assert()

    C库头文件提供<stdlib.h>两个不是相当完美的程序函数:abort与exit.
    abort: 这是默认的程序结束函数,这种方式可能会或可能不会以刷新与关闭打开的文件
或删除临时文件,这与你的设计有关.
    exit: 附加了关闭打开文件与返回状态码给执行环境,并调用你用atexit注册的返回函数
示例:
    #include <stdlib.h>
    #include <stdio.h>
    static void atexit_handler_1(void)
    {
        printf("within 'atexit_handler_1'\n");
    }
    static void atexit_handler_2(void)
    {
      printf("within 'atexit_handler_2'\n");
    }

    int main()
    {
        atexit(atexit_handler_1);
        atexit(atexit_handler_2);
      exit(EXIT_SUCCESS);
        printf("This line shoul never appear!\n");
   
        return 0;
    }
但是在程序中我们更希望有条件地结束程序,这就用到的了诊断工具:assert宏
assert宏在<assert.h>中的定义如下:
#if defined NDEBUG
#define assert(condition)   ((void)0)
#else
#define assert(condition) _assert((condition), #condition, _FILE_,_LINE_)
#endif
但是assert宏的实现并不唯一,在VC6.0中如下:
#define assert(exp) (void)((exp)(_assert(#exp,_FILE_,_LINE_),0));
Borland C++5.5:
#define assert(exp) ((exp)?(void)0: _assert(#exp,_FILE_,_LINE_))

    我们要经常使用assert,这样可能更容易地进行维护程序,但是要注意,assert宏
只在Debug版本里面才有效,在Release版本里不起任何作用,所以不要在assert
宏里进行任何实质性的运算,如 assert(++i != 0); 这样的代码绝对不能出现在程序
中的,因为Debug和Release的结果是完全不一样的.assert 宏常用的方式如下:
    static voif   f(char *p)
    {
         assert(p!=NULL);
         ......
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值