C 语言中函数的跳转
2021-07-11 03:07
标签:修改 c 语言 地址 判断 span 函数 printf void got 1.同一个函数内,可以使用goto语句: eg: void text_1( void ) { char i=0; a : i++; printf ( " text_1 = %d \r\n" , 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 \r\n" , 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 语言中函数的跳转 标签:修改 c 语言 地址 判断 span 函数 printf void got 原文地址:https://www.cnblogs.com/xingboy/p/9552409.html
下一篇:js学习——函数