本文翻译自Dan Saks的专栏文章。
C++中异常处理提供了longjmp处理错误的简单性,而且不会带来资源的泄漏。
在大型的,模块化比较好的系统中,错误检测代码与错误处理代码通常是分开的。也就是说,能检测到错误的代码不知道如何处理错误,能处理错误的代码不知道如何检测错误。实际上,错误检测代码与处理代码之间有相当大的“距离”。任何通用的错误处理技术都应当维持这种分离。
其中一种错误处理技术就是利用函数的返回值或者参数来报告所有的错误。虽然概念上很简单,但是返回错误指示会很快变得非常讨厌。沿着函数调用链往回传递错误代码将会让源代码变得更加混乱,从而导致目标代码大小的增加以及减慢执行速度。更糟的是,这些混乱将使你难以保证检查到所有可能的错误。
另一种技术是使用标准C的longjmp函数来实现一个从检测到错误的地点到错误处理地点的非本地跳转。使用longjmp消除了大部分由于检查返回代码所引起的混乱,并且对于目标代码的大小及执行速度的影响相对要小一些。不幸的是,调用longjmp很容易引起资源的泄漏,如列表1所示:
. Dan also welcomes your feedback: e-mail him at .