首页 > 解决方案 > 如果不使用 fclose() 返回 EXIT_FAILURE 会发生什么?

问题描述

假设我使用 fopen 并认为文件格式对我的程序无效或指针为 NULL。当我到达那种情况而不使用 fclose 时简单地返回 EXIT_FAILURE 会有什么后果?

标签: cfileiofclose

解决方案


EXIT_FAILURE是库中定义的宏,stdlib.h扩展为1. 另一方面,宏EXIT_SUCCESS常数扩展为0。在我们的一般约定中,返回0主函数表明代码运行成功,否则错误退出。

此外,刷新流和撤消这些事情,atexit()将完成这项工作。

请注意,我们将在x全局范围内使用,因为将作为参数传递的函数atexit()不能在其中传递任何内容。atexit()根据C++ Reference(使用 C 声明)的函数签名如下:

int atexit (void (*func)(void));

让我们假设以下程序:

#include <stdio.h>
#include <stdlib.h>

// will be used for atexit()
void exit_stuffs(void);

// to use return code
int x;

int main(void) {
    int a = 4;

    x = (a < 5) ? EXIT_FAILURE : EXIT_SUCCESS;

    atexit(&exit_stuffs);
    
    return x;
}

void exit_stuffs(void) {
    printf("The return code was: %d\n", x);
}

这将分配EXIT_FAILUREx然后返回x。在程序退出时,atexit()还给出了一个使用示例。


推荐阅读