exit和atexit

2023-12-18 10:38
文章标签 exit atexit

本文主要是介绍exit和atexit,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通用工具函数库stdlib.h提供了除从main函数中正常返回之外的其他一些终止程序运行的方法,如exit和atexit。exit强制终止程序的运行,就像正常结束一样,当检测到一个输入错误或者欲处理的文件无法打开时,常常使用exit来结束程序。atexit注册一个函数,这个函数必须在程序成功结束时调用–要么程序执行到了main函数末尾,要么调用了exit函数,使程序结束。
atexit接收指向欲注册函数的指针(即函数名)作为实参。这个在程序结束时被调用的函数不能有实参,也不能返回任何一个值,最多能注册32个在程序结束时被调用的函数。
exit函数接收一个实参。这个实参通常是符号常量EXIT_SUCCESS或EXIT_FAILURE。如果使用EXIT_SUCCESS来调用exit函数,一个系统定义的,代表程序成功结束的数值将返回给主调环境。如果使用EXIT_FAILURE来调用exit函数,将返回一个系统定义的,代表程序未成功的数值。调用exit后,由 atexit注册的所有函数,将按照与它们注册相反的顺序,依次被调用。所有与程序相联系的输入、输出流将被处理完,然后关闭,控制也返回到主调环境中。
示例如下:

#include <stdio.h>
#include <stdlib.h>#define DEBUG 0void print1();
void print2();
void print3();int main(int argc, char const *argv[])
{atexit(print1);atexit(print2);atexit(print3);if (DEBUG == 1)exit(EXIT_SUCCESS);elseexit(EXIT_FAILURE);return 0;
}void print1() {printf("This is print1.\n");
}
void print2() {printf("This is print2.\n");
}
void print3() {printf("This is print3.\n");
}

注意,不论exit参数是什么,函数均调用atexit注册的函数。

这篇关于exit和atexit的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508086

相关文章

王立平--android中让程序终止退出的解决办法 System.exit(0)

System.exit(0); System.exit(0)是将你的整个虚拟机里的内容都停掉了, 而finish()只是退出了activity,并没有退出应用,Application还是存在于内存中的,除非被系统回收。   System.exit(0)是正常退出程序, System.exit(1)或者说非0表示非正常退出程序 System.exit(sta

编译时出现错误 -- clang: error: linker command failed with exit code 1 (use -v to see invocation)

出现这个错误的原因有多种,常见的是因为某些文件的缺失或者是文件的重复导致的。 这类错误查看的关键在于其上一行的文字。 对于文件缺少而导致错误的情况: 例如上图中的示例,其上一行文字为 ld:library not found for -lrxl,可以看出是缺失了某一文件而导致的错误,这行文字中的最后“ -lrxl ”:-l 代表着其前缀是“lib”,连着后面的 rxl,其名称为 libr

VS2012配置Opengl以及“无法解析的外部符号 __imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用”问题

1、配置步骤 (1)首先下载glut相关文件,下载地址: http://download.csdn.net/detail/u013383042/9329101 (2)glut.h:头文件,将其复制到 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\gl (原本没有gl文件夹,需要手动新建一个gl文件夹) (3)

C++中的exit()函数

原创:http://blog.csdn.net/u013383042/article/details/51106231 exit(0)与exit(1)都是表示退出. exit(0):表示正常退出 exit(1):表示出错(或非正常)退出。

return abort exit函数的区别

按面向对象的思想,程序也是一个对象,因此,程序也有生有死。 C++在编译一个程序后,这样执行程序:(1)执行开工函数,此时对 程序初始化,主要指全局变量初始化。(2)调用main函数。(3)执行 收工函数,对全局变量(对象)进行析构。所以如下程序会有输出, 尽管main函数为空:     #include      int  x=printf("ABCDEF");     void main(

启动Eclipset提示: java was started but returned exit code=13

启动Eclipset提示: java was started but returned exit code=13 今天启动Eclipse时打不开,提示信息如下:  【解决办法】 这种情况一般是JDK版本和Eclipse版本不一致造成的,例如JDK是32位,Eclipse是64位。 卸载掉32位的JDK重新安装64的JDK即可。

Android studio编译报non-zero exit value 2;错误

解决方法在工程的build.gradle中添加 multiDexEnabled true,如下所示: android {....defaultConfig {.....multiDexEnabled true} 补充:今天发现针对The number of method references in a .dex file cannot exceed 64K.这个错误,上述的方法同样有效 参

pthread_exit 介绍

pthread_exit 是 POSIX 线程(pthread)库中用于终止线程执行的一个函数。当一个线程调用 pthread_exit 时,它会立即停止执行当前线程的代码,并允许其他线程继续执行。与进程退出时调用 exit 或 _exit 不同,pthread_exit 只影响调用它的线程,而不影响整个进程或进程中的其他线程。 函数原型 #include <pthread.h>void pt

Error:Execution failed for task ':app:transformClassesWithDexForMfinished with non-zero exit value 2

一般报这个错误都是包冲突错误但是我的没有 在这个错误提示上面还有一个错误意思大概就是我的dex文件大于64k  然后我在网上搜有人给出了这个回答  在builde.gradle文件中 android{ defaultConfig {         ......         // dex突破65535的限制         multiDexEnabled true//添加这句

【Linux】exit和_exit的区别

文章目录 深入理解Linux的系统调用:`exit()` 与 `_exit()`一、`exit()`函数概述二、`_exit()`函数概述三、`exit()`与`_exit()`的区别四、实际编程中的应用场景五、总结 深入理解Linux的系统调用:exit() 与 _exit() 在Linux和Unix系统编程中,进程的终止是一个非常常见的操作。开发者通常使用exit()函