C 语言中函数的跳转

Posted xingboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言中函数的跳转相关的知识,希望对你有一定的参考价值。

1.同一个函数内,可以使用goto语句:

eg:

  void  text_1( void )

  {

    char i=0;

    a :

    i++;

    printf ( " text_1 = %d " , i);

    goto a ;

  }

2.不同函数之间的跳转,可以使用 setjmp / longjmp 函数:

eg:

  jmp_buf   jb;

  char i=0;

  void   text_2 ( void )

  {

    setjmp(jb);  // 保存当前AR到jb变量中

    i++;

    printf ( " text_2 = %d " , i);

  }

  void text_3 ( void )

  {

    longjmp(jb, 1);  // 设置当前AR为jb,并跳转到调用setjmp()之后的第一个语句处

  }

  void main ( void )

  {

     text_2 ( );

    wheil ( 1 )

    {

       text_3 ( );

    }

     }

        这里 setjmp( ) 第一次调用时总是返回 0,并标记当前AR地址;而通过 longjmp ( jb , r ) 跳转后其返

回值被修改为 r,并且 r 不能为 0。这样程序可以根据 setjmp( ) 的返回值来判断是否是 longjmp( ) 导致了

跳转才执行到此。

  C语言中每当有一个函数调用时,就会在堆栈(Stack)上准备一个被称为AR的结构,这个方法主要是

利用了 Active Record (活动记录)的地址实现的跳转。

 

注意:函数跳转不要乱用,容易打乱程序,一般函数跳转可以拿来做一些异常处理机制!

 

以上是关于C 语言中函数的跳转的主要内容,如果未能解决你的问题,请参考以下文章

Django框架学习----视图与模板(详情页的上下篇文章跳转跳转)

lua语言的跳转指令怎么用?

Android & Flutter 相互跳转

c#网页之间的跳转语句

arm汇编指令

stm32开发,C语言, 跳转执行中断函数,会保存原来函数的局部变量吗