abort()、exit()、atexit使用

abort()、exit()、atexit\atexit使用

1. abort()

  • 立即终止当前进程,产生异常程序终止

  • 进程终止时不会销毁任何对象

  • 示例:

    /* abort example */
    
    #include <stdio.h>      /* fopen, fputs, fclose, stderr */
    
    
    #include <stdlib.h>     /* abort, NULL */
    
    
    int main ()
    {
    FILE * pFile;
    errno_t err;
    err = fopen_s(&pFile, "myfile.txt", "r");
    if (err != 0)
    {
        fputs("error opening file\n", stderr);
        abort();
    }
        fclose (pFile);
        return 0;
    }

    abort

    stdin、stdout、stderr

    FILE *stdin;   
    FILE *stdout;   
    FILE *stderr;   
    
    #include <stdio.h>  
    

    以下是输入、输出和错误输出流的标准。

    默认情况下,标准输入从键盘读取,而标准输出和错误输出到屏幕。

    下面流指针可用访问标准流:

    指针
    stdin标准输入
    stdout标准输出
    stderr标准错误

    这些指针可用作指向函数的参数。 某些函数如 getcharputchar时,自动使用 stdinstdout

    这些指针是常数,不能指派新的值。 freopen 函数可用于重定向流到磁盘文件或其他设备。 操作系统可以重定向程序进行标准输入和输出在指令水平。

2. exit()

  • 正常终止进程,并进行清理!
    exits

  • 示例:

    
    #include <stdio.h>      /* printf, fopen */
    
    
    #include <stdlib.h>     /* exit, EXIT_FAILURE */
    
    
    int main ()
    {
    FILE * pFile;
    errno_t err;
    err = fopen_s(&pFile, "myfile.txt", "r");
    if (err != 0)
    {
        fputs("error opening file\n", stderr);
        exit(EXIT_FAILURE);
    }
    else
    {
        /* file operations here */
        fclose(pFile);
    }
     return 0;
    }

3. atexit (_onexit, _onexit_m)

  • 可指定在程序终止之前执行的 exit-processing 函数。 在执行 exit-processing 函数之前不会销毁在调用 atexit 之前初始化的任何全局静态对象。

  • 当程序正常终止时,向 _onexit 函数传递要调用的函数 (function) 的地址。 对 _onexit 的后续调用将创建一个函数注册表,其中的函数按 LIFO(后进先出)顺序执行。 传递到 _onexit 的函数不能接受参数。

    如果从 DLL 范围内调用 _onexit,则在使用 DLL_PROCESS_DETACH 调用 _onexit 之后,向 DllMain 注册的例程将会在 DLL 卸载时运行。

    _onexit 是 Microsoft 扩展。 对于 ANSI 可移植性,使用atexit。 该函数的 _onexit_m 版本适用于混合模式。(没懂)

  • 示例:

    /* atexit example */
    
    #include <stdio.h>      /* puts */
    
    
    #include <stdlib.h>     /* atexit */
    
    
    void fnExit1 (void)
    {
    puts ("Exit function 1.");
    }
    
    void fnExit2 (void)
    {
    puts ("Exit function 2.");
    }
    
    int main ()
    {
    atexit (fnExit1);
    atexit (fnExit2);
    puts ("Main function.");
    return 0;
    }
    output:
    Main function.
    Exit function 2.
    Exit function 1

以上函数具体情况可从cpp reference 查询

  • 13
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值