问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

程序的终止代码有哪些?

发布网友 发布时间:2022-04-28 14:18

我来回答

2个回答

热心网友 时间:2022-06-19 02:47

结束当前函数用return

如果你想结束当前程序的代码,只要在主函数里return就可以了

还有一个办法就是exit(0),这个是系统函数。
更多追问追答
追问
能具体说一下怎么用吗,之前用过,运行之后程序没有关闭。

追答

123456789101112131415161718192021222324252627282930313233343536

/*总结一下,结束自己的方法:1、在main里return2、调用void exit(int status)函数3、安装信号,来结束自己//这个新人还是不用的好,其实也不能,只要你安装一个信号,然后抛出信号就可以了。4、调用系统函数system()来kill自己的进程。*/ /*下面是我写的类子,main函数里最后是"Not end",如果没有跑出这个文言,说明函数中间终端了。我只写了return和status,信号,这个你可以自己看一下这方面的资料。*/ #include <iostream>#include <stdlib.h> #define true 1 using namespace std; int main (int argc, char** argv) { cout << "Sleep 1s ..." << endl; sleep(1); cout << "Exit(0) work ..." << endl; // return true; exit(0); //void exit(int status);这个是exit的函数,返回状态,int类型,该函数可以/*If one of these functions does not return (e.g., it calls _exit(2), or kills itself with a signal)*///这个为我摘要的该函数说明,大体意思就是说如果他没有return,那么就使用信号来kill自己。 cout << "Not end!" << endl;}

热心网友 时间:2022-06-19 02:47

C语言中的程序终止函数

在C语言的标准库<stdlib.h>中提供了一些与正常或者不正常的程序终止有关的函数,下面分别对其进行简单介绍。

参考文献:

[1] C和指针,P298,342

[2] C程序设计语言现代方法(第2版),P489

[3] atexit函数和exit函数的理解

1 abort()

  abort()函数用于不正常地终止一个正在执行的程序。函数原型如下:

void abort(void)
  这个函数将引发SIGABRT信号,你可以在程序中为这个信号设置一个信号处理函数,在程序终止(或干脆不终止)之前采取任何你想采取的动作,甚至可以不终止程序。

  abort()函数类似于exit()函数,但调用它会导致异常的程序终止。atexit()函数注册的退出函数不会被调用。根据具体的实现,它可能不会清理包含未输出数据的输出缓冲区,不会关闭打开的流,也不会删除临时文件。abort()函数返回一个由实现定义的状态码来指出“不成功的终止”。

补充:

  调用abort()函数时,实际上会产生SIGABRT信号。如果没有处理SIGABRT信号的函数,那么程序会如前所述那样异常终止。如果(通过调用signal()函数)为SIGABRT安装了信号处理函数,那么就会调用处理函数。如果处理函数返回,随后程序会异常终止。但是,如果处理函数不返回(比如它调用了longjmp()函数),那么程序就不会终止。

2 atexit()

  atexit()函数可以把一些函数注册为退出函数(exit function)。函数原型如下:

int atexit(void (*func) (void))
  把函数指针传递给atexit()函数时,它会把指针保存起来留给将来引用。当程序将要正常终止时(或者由于调用exit,或者由于main函数返回),退出函数将被调用。退出函数不能接受任何参数。

3 exit()

  exit()函数用于正常终止程序。函数原型如下:

void exit(int)
  如果程序以main函数返回一个值结束,那么其效果相当于用这个值作为参数调用exit()函数。在程序中的任何位置执行exit(n)调用通常等价于在main函数中执行return n。

  int参数返回给操作系统,用于提示程序是否正常完成。预定义符号EXIT_SUCCESS和EXIT_FAILURE分别提示程序的终止成功还是失败。exit()函数仅有的另一个可移植参数是0,它和宏EXIT_SUCCESS的意义相同。虽然程序也可以使用其他值,但它们的具体含义将取决于编译器。

  当程序发现错误情况使它无法继续执行下去时,这个函数尤其有用。你经常会在调用perrno之后再调用exit()终止程序。尽管终止程序并非处理所有错误的正确方法,但和一个注定失败的程序继续执行以后再失败相比,这种做法更好一些。

  注意,这个函数没有返回值。当exit()函数结束时,程序已经消失,所以它无处返回。

  当exit()函数被调用时,所有被atexit()函数注册为退出函数的函数将按照它们所注册的顺序被反序依次调用(参数由于被压入栈中,而先进后出)。然后,所有用于流的缓冲区被刷新,所有打开的文件被关闭。用tmpfile()函数创建的文件被删除。然后,退出状态返回给宿主环境,程序停止执行。

警告:

  由于程序停止执行,所以exit()函数绝对不会返回到它的调用处。但是,如果任何一个用atexit()注册为退出函数的函数如果再次调用了exit(),其效果是未定义的。这个错误可能导致一个无限循环,很可能只有当堆栈的内存耗尽才会终止。

4 _exit()

  _exit()函数类似于exit()函数,但是_exit()不会调用atexit()注册的退出函数,也不会调用之前传递给signal()函数的信号处理函数。此外,_exit()函数不需要清洗输出缓冲区,关闭打开的流,以及删除临时文件,是否执行这些操作是由实现定义的。函数原型如下:

void _exit(int)

  按照ISO C规定,一个进程可以登记多达32个函数,通常这32个函数被称为终止处理程序(退出函数),通过调用atexit()函数来登记这些函数,这些函数将由exit()函数自动调用。

  exit()和_exit()以及_Exit()函数的本质区别是是否立即进入内核,_exit()以及_Exit()函数都是在调用后立即进入内核,而不会执行一些清理处理,但是exit()则会执行一些清理处理,这也是为什么会存在atexit()函数的原因,因为exit()函数需要执行清理处理,需要执行一系列的操作,这些终止处理函数实际上就是完成各种所谓的清除操作的实际执行体。atexit函数的定义也给了程序员一种运用exit执行一些清除操作的方法,比如有一些程序需要额外的操作,具体的清除操作可以采用这种方法对特殊操作进行清除等。

  内核使程序执行的唯一方法是调用一个exec()函数,进程自愿终止的唯一方法是显式或者隐式调用(通过exit函数)_exit()或者_Exit()函数。因此exit函数中实质是对_exit()或者_Exit()函数的封装。exit会先执行自定义的终止处理函数,然后执行I/O库函数清理函数fclose(),这也是为什么可以在终止处理函数中可以继续运用printf之类函数的原因,因为I/O库函数的流对象还没有被清除,当然可以继续运用。执行完了所有的fclose()以后,可以执行真正意义上的终止函数_exit()或者_Exit()函数。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...的电器到成都,请问一下,那个航空快一些呀,多少/公斤? 前女友和我分手一年之后,出车祸死了,我很高兴,这种心理是不是不... 为什么听到前女友去世的消息,我竟然放声大哭,她很爱我,是我对她腻了... 兰州银行充天然气必须要本行卡吗 从服饰礼仪看中西方文化差异 为什么iqoo11评价那么低? 相机快门线的运用范围 快门线是干什么用的 请问这是什么虫子 还挺硬的 在楼房内 整理箱上面发现的 屋内有木质上... 请问这是什么虫子?家里抓到,2cm左右。坐标北京,昌平,冬季12月,楼房... mysql 错误代码1217 MYSQL外键约束检查失败,删除或修改主表记录失败... css的导航栏怎么修改横竖?? 对于程序员来说, Warning 真的不重要吗? 错误代码800是怎么回事 程序员操作失误把代码数据全部删了,该负责吗? 电脑安装不了软件,错误代码 电脑上出现错误代码106是什么意思 驱动程序安装失败,错误码=5 是什么意思 电脑出现错误代码600什么的是什么意思 电脑windows7错误代码29 proper工具查看错误代码不一致 软件存在bug是程序员把代码打错了造成的吗? 错误代码1001 错误代码6是怎么回事,怎么解决 运行时出错 错误代码:1 错误信息:数组成员引用下标超出定义范围 知乎推出高赞好物100榜单,有哪些好物你很喜欢,还有哪些你也想推荐上榜? 为什么我感觉比知乎要好呢?感觉知道里的网友回答很清楚又简单明了,而且大部分都很热心? 女人过了40岁,为什么还会和别的男人好上? 知乎上怎么那么多如何看待 为什么看到别人有朋友陪伴,心里十分羡慕和难过? 上传失败错误代码4.100001怎么回事? 125克蓝莓大约多少个 蓝莓一天吃几颗最好 蓝莓一天最多吃几个合适 把53个蓝莓平均放在盘子里能做到吗至少需要再加几个蓝莓才能做到平均分可以怎? 七个月婴儿吃几颗蓝莓 蓝莓一天吃几颗 蓝莓有几个品种 三维仿真系统怎样,有人知道么? 应急预案的应用 煤矿三维通风动态仿真模拟系统是由哪个公司研发 请问三维软件中有哪种可以实现建模作品实时的,真实效果模拟? 武汉注册公司需要哪些材料和流程 东方时尚APP没有3D模拟训练吗 注册配送公司需要什么手续 香槟酒属于白兰地的一种吗? 香槟和白兰地的区别到底是什么,轩尼诗到底是香槟还是白兰地 谁可以一语中的地告诉我白兰地、香槟、一般葡萄酒之间的区别 香槟 干邑 白兰地之间的区别和联系 喜欢品酒的朋友请问一下:香槟、威士忌、白兰地、二锅头有什么区别?希望分析的具体点,谢 红酒,白兰地,解百纳,香槟的区别?