Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果返回EXIT_失败而不使用fclose(),会发生什么情况?_C_File_Io_Fclose - Fatal编程技术网

如果返回EXIT_失败而不使用fclose(),会发生什么情况?

如果返回EXIT_失败而不使用fclose(),会发生什么情况?,c,file,io,fclose,C,File,Io,Fclose,假设我使用fopen并认为文件格式对我的程序无效,或者指针为空。当我到达该位置时,不使用fclose而直接返回EXIT\u FAILURE会有什么后果?当文件指针为空或您将文件格式编码为无效时,直接返回EXIT\u FAILURE不会有任何后果。这将是程序的简单退出,返回值为exit_FAILURE。尽管您可以在需要时使用atexit()函数在退出时清理资源。当文件指针为空或您将文件格式编码为无效时,简单返回退出失败不会产生任何后果。这将是程序的简单退出,返回值为exit_FAILURE。尽管您

假设我使用fopen并认为文件格式对我的程序无效,或者指针为空。当我到达该位置时,不使用fclose而直接返回EXIT\u FAILURE会有什么后果?

当文件指针为空或您将文件格式编码为无效时,直接返回EXIT\u FAILURE不会有任何后果。这将是程序的简单退出,返回值为exit_FAILURE。尽管您可以在需要时使用
atexit()
函数在退出时清理资源。

当文件指针为空或您将文件格式编码为无效时,简单返回退出失败不会产生任何后果。这将是程序的简单退出,返回值为exit_FAILURE。尽管您可以在需要时使用
atexit()
函数来清理退出时的资源。

退出失败是在
stdlib.h
库中定义的宏,它扩展到
1
。另一方面,宏
EXIT\u SUCCESS
常量扩展为
0
。在我们的常规约定中,将
0
返回到main函数表示代码确实成功运行,否则错误退出

此外,要刷新流并撤消操作,
atexit()
将完成这项工作

请注意,我们将全局使用
x
,因为在
atexit()
中作为参数传递的函数不能传递任何内容。
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: %d\n", x);
}
#包括
#包括
//将用于atexit()
作废退出物料(作废);
//使用返回码
int x;
内部主(空){
INTA=4;
x=(a<5)?退出失败:退出成功;
atexit(退出和退出);
返回x;
}
作废退出物料(作废){
printf(“返回代码为:%d\n”,x);
}

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

退出失败是在
stdlib.h
库中定义的宏,它扩展到
1
。另一方面,宏
EXIT\u SUCCESS
常量扩展为
0
。在我们的常规约定中,将
0
返回到main函数表示代码确实成功运行,否则错误退出

此外,要刷新流并撤消操作,
atexit()
将完成这项工作

请注意,我们将全局使用
x
,因为在
atexit()
中作为参数传递的函数不能传递任何内容。
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: %d\n", x);
}
#包括
#包括
//将用于atexit()
作废退出物料(作废);
//使用返回码
int x;
内部主(空){
INTA=4;
x=(a<5)?退出失败:退出成功;
atexit(退出和退出);
返回x;
}
作废退出物料(作废){
printf(“返回代码为:%d\n”,x);
}
这将
EXIT_FAILURE
分配给
x
,然后返回
x
。在程序退出时,还提供了使用
atexit()
的示例

当我到达那个位置时,不使用fclose简单地返回退出失败会有什么后果

无,但有一个例外:如果正在写入文件,则某些数据将丢失。基本上就是这样,不管返回什么-
EXIT\u失败在典型的操作系统上并不特别

当我到达那个位置时,不使用fclose简单地返回退出失败会有什么后果


无,但有一个例外:如果正在写入文件,则某些数据将丢失。基本上就是这样,返回什么并不重要-
EXIT\u失败
在典型的操作系统上并不特别。

main
返回相当于调用
EXIT
。所做的一些事情是用未写入的数据刷新流,关闭所有流,并删除使用
tmpfile
创建的所有文件。从
main
返回相当于调用
exit
。所做的一些事情是使用未写入的数据刷新流,关闭所有流,并删除使用
tmpfile
创建的所有文件。