当前位置: 技术问答>linux和unix
请问关于main函数里的exit问题
来源: 互联网 发布时间:2016-11-13
本文导语: 在linux下 #include #include #include void fun_ctrl_c(); int main() { (void) signal(SIGINT,fun_ctrl_c); /如果按ctrl +c,就会调用fun_ctrl_c函数 printf("无限循环"); while(1) { printf("这是无限循环n"); sleep(3); } exit(...
在linux下
#include
#include
#include
void fun_ctrl_c();
int main()
{
(void) signal(SIGINT,fun_ctrl_c); /如果按ctrl +c,就会调用fun_ctrl_c函数
printf("无限循环");
while(1)
{
printf("这是无限循环n");
sleep(3);
}
exit(0);
}
void fun_ctrl_c()
{
printf("t press ctrl+cn");
printf("buchuli");
(void) signal(SIGINT,SIG_DFL); /重新恢复SIGINT信号的系统默认处理
}
这个程序执行过程:按第一次ctrl+c的时候,就调用 fun_ctrl_c并恢复SIGINT信号的系统默认处理,当第二次按ctrl+c时候就结束进程。
(1)问当第二次按ctrl+c时候就结束进程了,那么main函数里边的 exit(0)又有什么作用呢?(我把exit(0)删除,得到的结果并没有不同)
(2)这个exit(0)能不能删除呢?
谢谢
#include
#include
#include
void fun_ctrl_c();
int main()
{
(void) signal(SIGINT,fun_ctrl_c); /如果按ctrl +c,就会调用fun_ctrl_c函数
printf("无限循环");
while(1)
{
printf("这是无限循环n");
sleep(3);
}
exit(0);
}
void fun_ctrl_c()
{
printf("t press ctrl+cn");
printf("buchuli");
(void) signal(SIGINT,SIG_DFL); /重新恢复SIGINT信号的系统默认处理
}
这个程序执行过程:按第一次ctrl+c的时候,就调用 fun_ctrl_c并恢复SIGINT信号的系统默认处理,当第二次按ctrl+c时候就结束进程。
(1)问当第二次按ctrl+c时候就结束进程了,那么main函数里边的 exit(0)又有什么作用呢?(我把exit(0)删除,得到的结果并没有不同)
(2)这个exit(0)能不能删除呢?
谢谢
|
(1)这个exit(0)楼主所写的程序没有作用的
(2)既然没有作用,当然可以删除了
(2)既然没有作用,当然可以删除了
|
这个exit(0)没有任何实际的作用,可以删除,因为任何情况下都不会执行到这一行。
|
这个exit(0)可能就是一个习惯的写法
按照标准,main应该返回一个int,如果正常结束就返回0,返回非0值表示异常推出。
虽然大多数情况这个返回值没什么用,有时候还是有用的。
比如写一个脚本,根据前一个命令的返回值来决定下一步动作,这时候就有用了。
具体到这个程序,exit(0)那里随便写什么,结果都一样,只要能通过编译,反正永远也不会执行那一行。
按照标准,main应该返回一个int,如果正常结束就返回0,返回非0值表示异常推出。
虽然大多数情况这个返回值没什么用,有时候还是有用的。
比如写一个脚本,根据前一个命令的返回值来决定下一步动作,这时候就有用了。
具体到这个程序,exit(0)那里随便写什么,结果都一样,只要能通过编译,反正永远也不会执行那一行。