萨金塔耶夫简历介绍:exit()函数详解和Exit() 和 Return() 的差别
来源:百度文库 编辑:九乡新闻网 时间:2024/05/06 10:04:20
exit(0) 表示程式正常, exit(1)/exit(-1)表示程式异常退出
exit() 结束当前进程/当前程式/,在整个程式中,只要调用 exit ,就结束
return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值..
exit(1)表示进程正常退出. 返回 1;
exit(0)表示进程非正常退出. 返回 0.
进程环境和进程控制(1): 进程的开始和终止
1. 进程的开始:
C程式是从main函数开始执行, 原型如下:
int main(int argc, char *argv[]);
通常main的返回值是int型, 正确返回0.
如果main的返回值为void或无, 某些编译器会给出警告, 此时main的返回值通常是0.
关于main的命令行参数不做过多解释, 以下面的程式展示一下:
#include
int main(int argc, char *argv[])
{
int i;
for (i = 0; i #include /* ISO C */
void exit(int status);
void _Exit(int status);
#include /* POSIX */
void _exit(int status);
以上3个函数的差别是:
exit()(或return 0)会调用终止处理程式和用户空间的标准I/O清理程式(如fclose), _exit和_Exit不调用而直接由内核接管进行清
理.
因此, 在main函数中exit(0)等价于return 0.
3. atexit终止处理程式:
ISO C规定, 一个进程最对可登记32个终止处理函数, 这些函数由exit按登记相反的顺序自动调用. 如果同一函数登记多次, 也会被
调用多次.
原型如下:
#include
int atexit(void (*func)(void));
其中参数是个函数指针, 指向终止处理函数, 该函数无参无返回值.
以下面的程式为例:
#include
static void myexit1()
{
printf("first exit handler\n");
}
static void myexit2()
{
printf("second exit handler\n");
}
int main()
{
if (atexit(my_exit2) != 0)
printf("can’t register my_exit2\n");
if (atexit(my_exit1) != 0)
printf("can’t register my_exit1\n");
if (atexit(my_exit1) != 0)
printf("can’t register my_exit1\n");
printf("main is done\n");
return 0;
}
运行结果:
$ ./a.out
main is done
first exit handler
first exit handler
second exit handler运行结果:
$./a.out arg1 arg2 arg3
argv[0]: ./a.out
argv[1]: arg1
argv[2]: arg2
argv[3]: arg3
exit() 结束当前进程/当前程式/,在整个程式中,只要调用 exit ,就结束
return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值..
exit(1)表示进程正常退出. 返回 1;
exit(0)表示进程非正常退出. 返回 0.
进程环境和进程控制(1): 进程的开始和终止
1. 进程的开始:
C程式是从main函数开始执行, 原型如下:
int main(int argc, char *argv[]);
通常main的返回值是int型, 正确返回0.
如果main的返回值为void或无, 某些编译器会给出警告, 此时main的返回值通常是0.
关于main的命令行参数不做过多解释, 以下面的程式展示一下:
#include
int main(int argc, char *argv[])
{
int i;
for (i = 0; i #include /* ISO C */
void exit(int status);
void _Exit(int status);
#include /* POSIX */
void _exit(int status);
以上3个函数的差别是:
exit()(或return 0)会调用终止处理程式和用户空间的标准I/O清理程式(如fclose), _exit和_Exit不调用而直接由内核接管进行清
理.
因此, 在main函数中exit(0)等价于return 0.
3. atexit终止处理程式:
ISO C规定, 一个进程最对可登记32个终止处理函数, 这些函数由exit按登记相反的顺序自动调用. 如果同一函数登记多次, 也会被
调用多次.
原型如下:
#include
int atexit(void (*func)(void));
其中参数是个函数指针, 指向终止处理函数, 该函数无参无返回值.
以下面的程式为例:
#include
static void myexit1()
{
printf("first exit handler\n");
}
static void myexit2()
{
printf("second exit handler\n");
}
int main()
{
if (atexit(my_exit2) != 0)
printf("can’t register my_exit2\n");
if (atexit(my_exit1) != 0)
printf("can’t register my_exit1\n");
if (atexit(my_exit1) != 0)
printf("can’t register my_exit1\n");
printf("main is done\n");
return 0;
}
运行结果:
$ ./a.out
main is done
first exit handler
first exit handler
second exit handler运行结果:
$./a.out arg1 arg2 arg3
argv[0]: ./a.out
argv[1]: arg1
argv[2]: arg2
argv[3]: arg3
exit()函数详解和Exit() 和 Return() 的差别
exit(0),return 0有什么区别呢?
Windows下stdlib.h与glut.h中exit()函数重复定义的解决方案
修饰函数和函数返回值的const的差别
How to exit Afghanistan
United States Seeking Negotiated Exit of Yeme...
Germany to exit nuclear power by 2022
linux中send函数和recv函数详解
「這個世界很髒」Muse “MK Ultra”MV (MTV EXIT)震撼心灵的视频!
排汗和排尿的差别
男人和女人的差别
妖精和妖怪的差别!
穷人和富人的差别
弹道导弹和巡航导弹的差别
穷人和富人的差别
穷人和富人的差别
穷人和富人的差别
ROLAP和MOLAP的概念和差别
拨开云雾 惠普商务本和家用本差别详解
Greece government to focus on exit plan from ...
男人和女人的差别是什么
男人和女人的心理差别
文人和商人的差别 - 热点时评
【漫画】男人和女人起床的差别