C语言高级特性与安全问题解析
1. 非局部跳转 - setjmp和longjmp
在C语言中,标准库提供了一种特殊的机制来实现非局部跳转,即 setjmp 和 longjmp 函数。这种机制允许我们存储计算上下文并在需要时恢复它。不过,需要注意的是,存储的上下文并不包含与外部世界相关的内容(如打开的文件描述符)、浮点计算上下文以及栈变量。
要使用这一机制,需要包含 <setjmp.h> 头文件,其中涉及以下几个关键元素:
- jmp_buf :这是一种用于存储上下文的变量类型。
- int setjmp(jmp_buf env) :该函数接受一个 jmp_buf 实例,并将当前上下文存储在其中。默认情况下,它返回0。
- void longjmp(jmp_buf env, int val) :用于返回到存储在 jmp_buf 类型变量中的已保存上下文。当从 longjmp 返回时, setjmp 返回的不是0,而是传递给 longjmp 的 val 值。
下面是一个示例代码:
#include <stdio.h>
#include <setjmp.h>
int main(void) {
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



