关于终止处理程序,
据我所知,当代码中发生不好的事情时,例如当我们没有捕捉到异常时,
terminate()被调用,而terminate()又调用abort()
set_terminate(my_function)允许我们使用terminate()来调用用户指定的函数my_terminate。
我的问题是:这些函数在哪里“活着”它们似乎不是语言的一部分,但它们的工作方式就像它们存在于每个单独的cpp文件中一样,而不必包括任何头文件。
发布于 2010-04-25 01:30:27
如果terminate
和abort
的默认处理函数不是您自己安装的,那么它们必须位于您的编译器提供的运行时库中。
通常,每个程序都链接到运行时库(例如Linux下的glibc
)。在其他原因中,这是因为运行时库包含用于基本内容的“隐藏”代码,例如在启动时调用main
函数的代码。
发布于 2010-04-25 01:34:39
我不明白为什么您认为没有必要包括标题:
int main() {
abort();
}
为我提供以下错误:
error: 'abort' was not declared in this scope
C和C++都没有任何“特殊”函数--如果你想使用一个函数,你必须以某种方式声明它。这两个位于C++标准库中,并在cstdlib
和exception
中声明。当然,这些标头本身可能会被其他标头包含,从而使函数可用,但这并未在标准中指定。
发布于 2010-04-25 01:44:47
set_terminate -终止处理程序函数
将f设置为终止处理函数。
终止处理程序函数是在由于某种原因必须放弃异常处理过程时自动调用的函数。当抛出的异常或其他异常情况导致无法继续处理过程时,就会发生这种情况。
默认情况下,terminate处理程序调用cstdlib's abort函数
https://stackoverflow.com/questions/2705439
复制相似问题