abort()、exit()、atexit使用

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

1. abort()

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

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

  • 示例:

    /* abort example */
    
    #include       /* fopen, fputs, fclose, stderr */
    
    
    #include      /* 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()、exit()、atexit使用_第1张图片

    stdin、stdout、stderr

    FILE *stdin;   
    FILE *stdout;   
    FILE *stderr;   
    
    #include   
    

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

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

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

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

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

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

2. exit()

  • 正常终止进程,并进行清理!
    abort()、exit()、atexit使用_第2张图片

  • 示例:

    
    #include       /* printf, fopen */
    
    
    #include      /* 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       /* puts */
    
    
    #include      /* 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 查询

你可能感兴趣的:(C++)