何时以及为什么longjmp在C ++中使用?

时间:2010-08-05 13:00:13

标签: c++

我已经阅读了以下教程,但我不太了解它。什么时候使用longjmp以及为什么有必要知道?

http://www.cplusplus.com/reference/clibrary/csetjmp/longjmp/

4 个答案:

答案 0 :(得分:15)

不要使用它。

你唯一想在C ++中使用它的时间永远不会。你永远不应该有任何理由在一个编写良好的C ++程序中使用它(事实上,你应该没有任何理由在一个写得不好的C ++程序中使用它。)

答案 1 :(得分:5)

setjmp / longjmp 是一种处理异常的老式方法。首先,使用setjmp()设置跳转点。然后,从程序中的任何其他位置,您可以使用longjmp()跳回到该点。如果您的程序可以使用例外 - 而且现在大多数程序都可以 - 那么您不需要使用这些功能。

答案 2 :(得分:4)

在C ++中,它没有被使用,也没有必要知道,是短暂的。

答案 3 :(得分:3)

简而言之,setjmplongjmp是一种改变程序中控制流的方法。他们的工作方式如下:

  1. 您致电setjmp。该函数返回一个标记jmp_buf
  2. 你出去做别的事。
  3. 您致电longjmp并将其从setjmp传递给您。当你这样做时,程序将返回你调用setjmp的指针。如果你在另一个功能中并不重要。这就像关于类固醇的GOTO声明一样,带来了所带来的所有好处和缺点。
  4. 如前一张海报所说,不要使用它。你可以自己打结,因为程序中的控制流在这个地方移动。但是,setjmp / longjmp确实有实际用途。例如,它们可以用来模拟C中的异常。但总的来说,它们比它们的价值更麻烦!