假设我使用 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
在典型的操作系统上绝不是特别的。