今天我在想另一种语言中存在的try/catch块.谷歌搜索了一会儿,但没有结果.据我所知,C中没有try/catch这样的东西.然而,有没有一种方法可以"模拟"它们

推荐答案

C本身不支持异常,但你可以用setjmplongjmp次调用来模拟它们.

static jmp_buf s_jumpBuffer;

void Example() { 
  if (setjmp(s_jumpBuffer)) {
    // The longjmp was executed and returned control here
    printf("Exception happened here\n");
  } else {
    // Normal code execution starts here
    Test();
  }
}

void Test() {
  // Rough equivalent of `throw`
  longjmp(s_jumpBuffer, 42);
}

这个网站有一个很好的教程,介绍如何模拟setjmplongjmp的异常

C++相关问答推荐

理解C中的指针定义

C如何显示字符串数组中的第一个字母

如果实际的syscall是CLONE(),那么为什么strace接受fork()呢?

在struct中调用函数,但struct在void中 *

C编译器是否遵循restrict的正式定义?

在一个小型玩具项目中实现终端历史记录功能

为什么net/if.h在ifaddrs.h之前?

如何使用[BTStack]BLE发送大型(>;2kb)信息包

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

Flose()在Docker容器中抛出段错误

为什么双精度d=flt_max+flt_max;在c语言中得到inf的结果

MacOS下C++的无阻塞键盘阅读

C语言中MPI发送接收字符串时出现的分段错误

链表删除 node 错误

运行时错误:在索引数组时加载类型为';char';`的空指针

Valgrind正在使用一个Fexecve电话报告不可能发生的事情

struct 中的qsort,但排序后的 struct 很乱

10 个字节对于这个 C 程序返回后跳行的能力有什么意义

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?

无法在线程内用 C 打印?