我正在用C编写一段预写的代码到Rust.所以这里有一个条件,在c中是由long jmp处理的,但我不知道如何在ruust中处理它.

if (pointer_to_struct->count_of_something < (count << 10)){ 
    longjmp(*(pointer_to_struct->xyz), MACRO);
}

推荐答案

你在你的问题中几乎没有给出背景,但我还是会试着回答.

在C中,当其他方法不可行时,使用longjmp()来展开深度嵌套的调用堆栈.它很难正确使用,但考虑到在C中缺乏其他展开堆栈的方法,它有时是最小的害处.

在Rust中,最惯用的展开堆栈的方法是使调用堆栈中涉及的所有函数返回Result<...>,对所有调用使用问号操作符?,当您想要展开时返回Err(...).这会导致所有函数正常返回,并调用析构函数.

最接近set_jmp()long_jmp()的Rust 是catch_unwind()panic!().这些功能不能用作一般的流量控制机制.您只能捕捉到"解压panic ",这有时是不可用的(例如,在嵌入式环境中).如果可以避免,请不要使用catch_unwind(),而应使用适当的错误处理.

C++相关问答推荐

什么C代码将确定打开的套接字正在使用的网络适配器?

在32位处理器上优化53—32位模计算>

GCC预处理宏和#杂注GCC展开

C中的指针增量和减量(*--*++p)

非常大的数组的大小

非正规化边缘毛刺

C-使用指针返回修改后的整数数组

如何在C中使数组变量的值为常量?

通过描述符查找文件路径时出现问题

这个空指针类型的转换是有效代码还是恶意代码?

在C程序中使用Beaglebone Black UART的问题

为什么Linux无法映射这个PT_LOAD ELF段?

生产者消费者计数器意外输出的C代码

正在try 理解C++中的`正在释放的指针未被分配‘错误

分配给静态变量和动态变量的位置之间有区别吗?

如何在C中计算包含递增和递减运算符的逻辑表达式?

C struct 中的冒泡排序

如何使用 VLA 语法使用 const 指针声明函数

free后内存泄漏?

我该如何处理这个 C 90 代码中的内存泄漏?