【发布时间】:2016-07-05 12:12:00
【问题描述】:
为了理解 setjmp 和 longjmp 函数,我编写了以下代码,但我认为问题与这些函数无关。我期望输出是:
function1
function2
function2
但我不断得到:
function1
function2
function1
作为输出。代码:
#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>
void f1(char * a);
void f2(char * a);
jmp_buf buf1;
int main(int argc, char *argv[])
{
char * w;
f1( w);
return 0;
}
void f1(char * a)
{
a = "funtion 1";
printf("%s\n",a);
int i = setjmp( buf1 );
if( i == 0 )
f2( a );
printf("%s\n", a);
}
void f2(char * a)
{
a = "function 2";
printf("%s\n",a);
longjmp( buf1 , 2 );
}
我在这里做错了什么?感谢您的帮助。
【问题讨论】:
-
你做错的是覆盖
char *a。 -
int i = setjmp( buf1 );您不能在赋值中使用来自 setjmp() 的“返回值”(在这种情况下,初始化程序是一个赋值),只能在 if 或 switch 条件下测试它(甚至while/do/for)
标签: c parameter-passing pass-by-reference setjmp