abort()和terminate()“live”在哪里?

时间:2010-04-24 17:26:58

标签: c++

关于终止处理程序,

据我所知,当代码中出现不良事件时,例如当我们没有发现异常时,

调用

terminate(),然后调用abort()

set_terminate(my_function)允许我们使用terminate()来调用用户指定的函数my_terminate。

我的问题是:这些函数“实时”在哪里它们似乎不是语言的一部分,但它们就好像它们存在于每个单独的cpp文件中,而不必包含任何头文件。

3 个答案:

答案 0 :(得分:5)

如果有terminateabort的默认处理函数没有自己安装,那么它们必须位于编译器提供的运行时库中。

通常,每个程序都链接到运行时库(例如Linux下的glibc)。除了其他原因之外,这是因为运行时库包含用于基本事物的“隐藏”代码,例如,在启动时调用main函数的代码。

答案 1 :(得分:3)

我不明白为什么你认为不需要包含标题:

int main() {
    abort();
}

给我以下错误:

error: 'abort' was not declared in this scope

C和C ++都没有任何“特殊”功能 - 如果你想使用一个函数,你必须以某种方式声明它。这两个存在于C ++标准库中,并在cstdlibexception中声明。当然,这些标题本身可能被其他标题包含#included,从而使函数可用,但标准没有指定。

答案 2 :(得分:2)

set_terminate - 终止处理函数

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

终止处理程序函数是在由于某种原因必须放弃异常处理过程时自动调用的函数。如果找不到抛出异常的处理程序,或者某些其他无法继续处理过程的异常情况,就会发生这种情况。

默认情况下,终止处理程序调用{​​{3}}函数