我已经阅读了以下教程,但我不太了解它。什么时候使用longjmp以及为什么有必要知道?
http://www.cplusplus.com/reference/clibrary/csetjmp/longjmp/
答案 0 :(得分:15)
不要使用它。
你唯一想在C ++中使用它的时间永远不会。你永远不应该有任何理由在一个编写良好的C ++程序中使用它(事实上,你应该没有任何理由在一个写得不好的C ++程序中使用它。)
答案 1 :(得分:5)
setjmp / longjmp 是一种处理异常的老式方法。首先,使用setjmp()
设置跳转点。然后,从程序中的任何其他位置,您可以使用longjmp()
跳回到该点。如果您的程序可以使用例外 - 而且现在大多数程序都可以 - 那么您不需要使用这些功能。
答案 2 :(得分:4)
在C ++中,它没有被使用,也没有必要知道,是短暂的。
答案 3 :(得分:3)
简而言之,setjmp
和longjmp
是一种改变程序中控制流的方法。他们的工作方式如下:
setjmp
。该函数返回一个标记jmp_buf
longjmp
并将其从setjmp
传递给您。当你这样做时,程序将返回你调用setjmp
的指针。如果你在另一个功能中并不重要。这就像关于类固醇的GOTO
声明一样,带来了所带来的所有好处和缺点。如前一张海报所说,不要使用它。你可以自己打结,因为程序中的控制流在这个地方移动。但是,setjmp
/ longjmp
确实有实际用途。例如,它们可以用来模拟C中的异常。但总的来说,它们比它们的价值更麻烦!