【发布时间】:2019-04-15 12:23:28
【问题描述】:
我正在开发一个 C 语言框架,为此我想实现异常,为此我将 longjump 与 setjump 一起使用,但在 x64 机器上,longjump 仍然输出一个整数。
我创建了一个类(本质上是 vptr 的结构),它表示异常,但要在代码中将其抛出,我需要抛出一个指向该结构的指针。对于 x64 机器,指针有一个 unsigned long long 值(qword),对于 x86 机器有一个 unsigned int(dword),所以我只需要输出 qword 来处理错误。
有longjmp和setjmp的实现,可以输出qword吗?
或者也许我可以编写自己的 longjump,但需要原始源代码。
【问题讨论】:
-
要便携,使用全局间接...
-
@Jean-BaptisteYunès 我在哪里可以找到这方面的信息?另外,这是 WinAPI 框架,我不确定是否需要可移植性
-
没有
longjmp()的可移植(标准)变体返回long而不是int。您需要查看特定于平台的手册中的选项,但我认为您不会找到。你不能简单地使用另一个全局变量吗? -
除非你在单个函数中跳转,因此
jmpbuf变量是该函数的本地变量,否则你已经有一个多线程的混乱。无论您使用何种技术来为每个线程提供它自己的jmpbuf,也可以用于为long返回值提供额外的空间。 -
C 或 C++ 中没有很多东西比 C++ 异常处理更糟糕,但 setjmp/longjmp 绝对是其中之一。避免。不惜一切成本。就像瘟疫一样。