2

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

错误

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

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

4

1 回答 1

1

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

void longjmperror(void);

您使用该签名编写一个函数。它不能返回(或者,如果返回,程序将被abort()编辑)。您在该函数中所做的是您的事,但请记住,对于要调用的函数,事情已经发生了适度的灾难性错误)。它可能会在您的日志文件中记录一个错误,或者只是在退出之前写一条更有意义的消息(而不是中止并且可能是核心转储)。

您将包含该函数的目标文件链接到系统库之前。通常不希望您替换系统功能,但这是您打算覆盖的功能。

于 2014-03-03T06:52:09.290 回答