我正在查看longjmp的手册,在错误部分,它说:
错误
如果env的内容已损坏,或者对应于已经返回的环境,则longjmp()例程调用例程longjmperror(3)。如果longjmperror() 返回,程序中止(参见abort(3))。 longjmperror()的默认版本将消息“longjmp botch”打印到标准错误并返回。 希望更优雅地退出的用户程序应该编写自己的longjmperror()版本。
我如何编写自己的longjmperror版本?根据我在C中所知道的,你不能覆盖函数,当我找不到要跳转的点时,我真的需要跳远以特定的方式退出。
答案 0 :(得分:1)
无论如何,在Mac OS X(10.9.2,Mavericks)上,longjmperror()
的原型是:
void longjmperror(void);
您使用该签名编写函数。它不能返回(或者更确切地说,如果它返回,程序将abort()
。你在这个职能部门所做的就是你的事业,但要记住事情已经适度地发生了灾难性的错误,因为这个职能被调用了。它可能会将错误记录到您的日志文件中,或者只是在退出之前写一个更有意义的消息(而不是中止和核心转储)。
将包含该功能的目标文件链接到系统库之前。通常不会要求您更换系统功能,但这是您要覆盖的功能。