abort() 和 terminate() 函数定义在哪里?

5
关于终止处理程序,
据我了解,当代码出现问题时,例如我们没有捕获异常时,
将调用terminate(),然后调用abort()
set_terminate(my_function)允许我们使terminate()调用用户指定的函数my_terminate。
我的问题是:这些函数“存在”在哪里?它们似乎不是语言的一部分,但却像存在于每个cpp文件中,而无需包含任何头文件。

你必须为调用的函数包含头文件。因此,你的语句“无需包含任何头文件”不适用于 set_terminate() - MSalters
3个回答

5
如果存在默认的terminateabort处理程序函数,而你自己没有安装它们,那么它们必须在编译器提供的运行库中。
通常,每个程序都链接到运行库(例如Linux下的glibc)。其中一个原因是,运行库包含用于重要功能的“隐藏”代码,例如调用你的main函数的代码。

1
谢谢 stakx,有运行库的存在解释了事情。 - aCuria

3
我不明白为什么你认为不需要包含标题:
int main() {
    abort();
}

我遇到了以下错误:

error: 'abort' was not declared in this scope

无论是C还是C++,都没有任何“特殊”的函数 - 如果你想使用一个函数,你必须以某种方式声明它。这两个函数位于C++标准库中,并在cstdlibexception中声明。当然,这些头文件本身可能会被其他头文件包含,从而使得这些函数可用,但这并没有被标准所规定。


2
@Neil:我认为他指的是默认的意外函数调用terminate(),但用户不需要#include一个包含terminate()的头文件才能使用它。 - Billy ONeal

2

set_terminate - 终止处理程序函数

将f设置为终止处理程序函数。

终止处理程序函数是在某些情况下自动调用的函数,当异常处理过程无法继续时会发生这种情况。当找不到抛出异常的处理程序或其他使处理过程无法继续的异常情况时,就会发生这种情况。

默认情况下,终止处理程序调用cstdlib的abort函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接