是否允许 null Terminate() 处理程序?
在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过研究该标准可以发现以下内容:
好像不标准。
Looking into the standard reveals the following:
Seems to be non-standard.