在C中编写我自己的longjmperror()

时间:2014-03-01 21:09:24

标签: c longjmp

我正在查看longjmp的手册,在错误部分,它说:

  

错误

     

如果env的内容已损坏,或者对应于已经返回的环境,则longjmp()例程调用例程longjmperror(3)。如果longjmperror()        返回,程序中止(参见abort(3))。 longjmperror()的默认版本将消息“longjmp botch”打印到标准错误并返回。 希望更优雅地退出的用户程序应该编写自己的longjmperror()版本。

我如何编写自己的longjmperror版本?根据我在C中所知道的,你不能覆盖函数,当我找不到要跳转的点时,我真的需要跳远以特定的方式退出。

1 个答案:

答案 0 :(得分:1)

无论如何,在Mac OS X(10.9.2,Mavericks)上,longjmperror()的原型是:

void longjmperror(void);

您使用该签名编写函数。它不能返回(或者更确切地说,如果它返回,程序将abort()。你在这个职能部门所做的就是你的事业,但要记住事情已经适度地发生了灾难性的错误,因为这个职能被调用了。它可能会将错误记录到您的日志文件中,或者只是在退出之前写一个更有意义的消息(而不是中止和核心转储)。

将包含该功能的目标文件链接到系统库之前。通常不会要求您更换系统功能,但这是您要覆盖的功能。