C语言 如果在不使用 fclose() 的情况下返回EXIT_FAILURE会发生什么情况?



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

当文件指针为 NULL 或将文件格式编码为无效时,简单地返回 EXIT_FAILURE 不会有任何后果。这将是具有返回值的程序EXIT_FAILURE简单退出。尽管您可以在需要时利用atexit()函数在退出时清理资源。

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

此外,要冲洗流并撤消操作,atexit()将完成工作。

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

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: %dn", x);
}

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

当我到达那个位置时,简单地返回EXIT_FAILURE而不使用 fclose 有什么后果?

无,但有一个例外:如果您正在写入文件,那么一些数据将丢失。差不多就是这样,你返回什么并不重要 -EXIT_FAILURE在典型的操作系统上绝不是特别的。

相关内容

  • 没有找到相关文章

最新更新