c - 如果不使用 fclose() 返回 EXIT_FAILURE 会发生什么?
问题描述
假设我使用 fopen 并认为文件格式对我的程序无效或指针为 NULL。当我到达那种情况而不使用 fclose 时简单地返回 EXIT_FAILURE 会有什么后果?
解决方案
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_FAILURE
给x
然后返回x
。在程序退出时,atexit()
还给出了一个使用示例。
推荐阅读
- java - WAP 输入一个句子并打印该句子中出现了多少次“is”[Java]
- java - Java 和 Kotlin 中的 Lambda 之间的差异
- awk - gensub() 可以接受函数调用作为第二个参数吗?
- ruby-on-rails - Mongo::Error::SocketError:在 mongo 副本集中执行查询时管道损坏
- laravel - Laravel 多重身份验证来自两个不同的路由和视图
- pine-script - 今天第五分钟关门
- android - 未显示所有数据,但带有 RecyclerView 的 AdMobs
- python - Processing.py 中的“动画”运动
- node.js - 如何使用 nodejs 在云 Firestore 中检索用户身份验证信息?
- datepicker - vuetify v-date-picker 在波斯语环境中不是从每月的第一天开始