[C语言] 关于jmp_buf类型分析
发表于 : 2017-04-20 21:20
我在一个c语言实现的minigc源码(https://github.com/authorNari/minigc)的阅读中遇到一个问题。
关于编译jmp_buf类型变量,我已经查过了jmp_buf的含义,并且在google、wiki和stack overflow查询过相关问题没有结果。
疑惑代码如下,gc.c文件内的
问题是我们遍历env变量能的得到什么信息呢?
关于编译jmp_buf类型变量,我已经查过了jmp_buf的含义,并且在google、wiki和stack overflow查询过相关问题没有结果。
疑惑代码如下,gc.c文件内的
代码: 全选
static void
gc_mark_register(void)
{
jmp_buf env;
size_t i;
/*
* 把当前栈的上下文存储到env里
* 保存env的时候成功返回0
* 以后可以通过调用longjmp(env, vlu);
* 返回到最后一次注册到env里的setjmp出,并且此时setjmp返回vlu
* jmp_buf 本质是一个类数组类型!
*/
setjmp(env);
/* TODO 为何会对jmp_buf进行这种hark的操作? */
for (i = 0; i < sizeof(env); i++) {
gc_mark(((void **)env)[i]);
}
}