c - 在 C 中使用 setjmp 和 longjmp 是好的编程习惯吗?

标签 c exception unix

我是一名 C++ 程序员,习惯于具有良好异常处理能力的 OO 语言。

据我所知,setjmp 和 longjmp 本质上是传播异常条件的 C 风格方式。它们似乎也是一种可以向上传播堆栈的 goto 的强烈形式。

所以,首先:在这个时间点直接在 C 中使用它们是好的做法,还是它们已被弃用? (注意:C 不是 C++)。

其次,它们在 C++ 中有任何用处吗?或者我认为它们是被 C++ 的异常处理功能所取代的遗留机制是否正确?

最佳答案

从本质上讲,您断言 jmp 风格的传播与 goto 本质上是一样的,这是正确的。阅读Dijkstra's (famous and controversial) paper关于 goto 的(我认为)为为什么很少使用 goto 提供了合理的推理。除非你确切地知道你为什么要做你正在做的事情(或者你在非常特定的领域工作——比如嵌入式编程),否则你不应该接触 gotolongjmp

关于c - 在 C 中使用 setjmp 和 longjmp 是好的编程习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7262494/

相关文章:

c - Scanf 查找整数

c - 日期字符串的快速自动猜测

java - 每个抛出异常的语句的 try/catch 是否被视为反模式?

c - 这个基于 fork 的模式是什么?

c - 什么时候默认使用 C 中的 main 函数

c - 为什么程序不写入文件?

java - 当我尝试读取 Excel 文件时出现 ClassNotFoundException

java - 如何在 Java 中模拟未处理的异常

macos - Bash:管道输出到后台进程?

c - 我可以用什么来等待创建所有线程?