std::quick_exit和std::abort之间的差异
std::quick_exit()
这将导致无需完全清理资源而发生正常程序终止。
语法:
void quick_exit(int exit_code) noexcept;
在执行线程的情况下,代码变得复杂并且很难知道线程的执行。 在一个线程可能在等待进程结束,而另一个线程则在等待前一个线程时,实际程序通常会死锁并退出,这是不愉快的。 管理员必须强制启动系统或关闭用户界面等,才能摆脱此锁定。 为此目的制作了 std :: quick_exit() 。 它终止了程序,使我们摆脱了执行真实程序时摆脱死锁的电子邮件。 它清除IO,但不会清空静态析构器。另一个函数 at_quick_exit() 将函数作为参数,该参数在调用 quick_exit() 函数时执行。 注册到此的功能按其执行顺序的反向顺序调用。
#include <cstdlib>
void atEXIT()
{
cout << "快速退出功能。";
}
int main ()
{
at_quick_exit(atEXIT);
cout << "主要功能";
quick_exit(0);
cout << "结束主要功能";
return 0;
}
输出:
主要功能
快速退出功能。
std::abort()
除非SIGABRT正在由传递给std :: signal的信号处理程序进行捕获并且处理程序不返回,否则它将导致异常程序终止。 语法:
void abort() noexcept;
POSIX规定abort函数覆盖阻止或忽略SIGABRT信号。
#include <cstdlib>
int main ()
{
FILE * fp;
fp= fopen("myfile.txt", "r");
if (fp== NULL)
{
fputs("打开文件时出错\n", stderr);
abort();
}
fclose(fp);
return 0;
}
**输出:** 如果找不到名为myfile.txt的文件或由于任何原因失败,则输出错误消息并中止程序。
相似之处: std :: quick_exit()和std :: abort()函数在cstdlib标头中定义。 这两个函数都没有参数和异常。 它们都没有返回值。 它们用于终止程序,但它们仍然彼此不同。 差异: 引入 quick_exit() 函数的原因是在清除IO的同时结束运行的程序并仍然获得某些程序的一部分,即 at_quick_exit() 中注册的函数可执行,而 std::abort() 函数终止程序而不执行程序的进一步部分并清除IO。
让我们以表格形式看到差异-:
ID | std :: quick_exit | std :: abort |
---|---|---|
1。 | 在头文件 |
定义在头文件 |
2。 | 其语法为: quick_exit(int exit_code) | 其语法为: abort(); |
3。 | 它仅采用一个参数。 | 它不采用任何参数。 |
4。 | 其返回值为void。 | 其返回值为void。 |