是否允许 null Terminate() 处理程序?

发布于 2024-08-21 14:18:47 字数 554 浏览 6 评论 0原文

在 VC++7 中,如果我执行以下操作:

void myTerminate()
{
    cout << "In myTerminate()";
    abort();
}

int main( int, char** )
{
    set_terminate( &myTerminate );
    set_terminate( 0 );
    terminate();
    return 0;
}

程序的行为与直接调用 abort() 完全相同,这正是默认的 terminate() 处理程序的作用。

如果我省略 set_terminate( 0 ); 语句,则会调用我的终止处理程序。因此,调用 set_terminate( 0 ) 似乎具有将 terminate() 处理程序重置为默认值的效果。

此行为仅特定于 VC++7 吗?如果我在其他实现上调用 set_terminate( 0 ) ,程序是否会遇到未定义的行为?

In VC++7 if I do the following:

void myTerminate()
{
    cout << "In myTerminate()";
    abort();
}

int main( int, char** )
{
    set_terminate( &myTerminate );
    set_terminate( 0 );
    terminate();
    return 0;
}

the program behaves exactly as if abort() was called directly which is exactly what default terminate() handler does.

If I omit the set_terminate( 0 ); statement my terminate handler is being called. So calling set_terminate( 0 ) seems to have the effect of resetting the terminate() handler to default.

Is this behavior specific to VC++7 only? Won't the program run into undefined behavior if I call set_terminate( 0 ) on some other implementation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨小沫ゞ 2024-08-28 14:18:47

通过研究该标准可以发现以下内容:

terminate_handler set_terminate(terminate_handler f) throw();

1 作用:建立函数
由 f 指定为当前处理程序
功能...剪切
2 要求:f 不得为空指针
3 返回:前一个终止处理程序。

好像不标准。

Looking into the standard reveals the following:

terminate_handler set_terminate(terminate_handler f) throw();

1 Effects: Establishes the function
designated by f as the current handler
function ... cut
2 Requires: f shall not be a null pointer.
3 Returns: The previous terminate_handler.

Seems to be non-standard.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文