您的位置:首页 > 其它

if else 同时执行 && setjmp和longjmp

2011-06-26 16:39 239 查看
正常情况下,if..else只能执行其中一个,因为如果判断的条件为真,则执行if里面的语句,如果判断为假,则执行else里面的语句。

那怎样能让if和else里面的语句都执行呢?

看看下面的代码吧^^

#include <stdio.h>
int main()
{
if(1)
{
printf("if/n");
goto test;
}
else
{
test:
printf("else/n");
}
return 0;
}


这个是利用C语言的goto实现的。

再看看下面这段代码吧:^^

#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
void test()
{
printf("test()/n");
longjmp(buf,1);
printf("这里不会执行/n");

}
int main()
{
if(!setjmp(buf))
{
printf("if/n");
test();
}
else
{
printf("else/n");
}
return 0;
}


看不懂?^^其实一接触我也不知道为什么

在《C专家编程》第128页有说:





setjmp

语法:

#include <setjmp.h> int setjmp( jmp_buf envbuf );
功能: 函数将系统栈保存于envbuf中,以供以后调用longjmp()。当第一次调用setjmp(),它的返回值为零。之后调用longjmp(),longjmp()的第二个参数即为setjmp()的返回值。

longjmp

语法:

#include <setjmp.h> void longjmp( jmp_buf envbuf, int status );
功能: 函数使程序从前次对setjmp()的调用处继续执行。参数envbuf一般通过调用setjmp()设定。参数status 为setjmp()的返回值,用来指示不同地点longjmp()的执行. status 不能设定为零。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: