第14章 函数跳转函数库:setjmp.h 在程序中常常需要根据某些条件进行相应的跳转操作,这时就需要用到跳转函数,其中包括非局部转移执行函数和非局部转移函数,这些函数都包含在setjmp.h头文件中。 14.1 longjmp()——非局部转移执行函数 longjmp()函数
实用程度:★★★★☆
实例位置:配套资源\SL\14\01
longjmp()函数用于非局部转移进程,使进程跳转到setjmp处执行。
语法
void longjmp(jmp_buf jmp, int retval);
longjmp()函数的语法参数说明如下:
参数jmp为jmp_buf结构体,用于保存发生调用出的局部环境。
参数retval表示此时setjmp的返回值。
longjmp()函数本身无返回值,它执行后跳转到保存jmp的setjmp()函数的调用,并由setjmp()函数返回1。
示例
本示例演示用longjmp()函数进行非局部跳转,执行到longjmp()时,程序跳转到setjmp()函数中进行判断,并输出结果。其具体代码如下:
运行结果如图14.1所示。
图14.1 使用longjmp()函数进行非局部跳转 14.2 setjmp()——非局部转移函数 setjmp()函数
实用程度:★★★★☆
实例位置:配套资源\SL\14\02
setjmp()函数用于非局部转移进程,设置缓冲区来保存系统堆栈的内容。
语法
int setjmp(jmp_buf jmp);
setjmp()函数的语法参数说明如下:
参数jmp为jmp_buf结构体变量,用于保存当前的环境信息。
setjmp()函数返回两个不同值,当第一次直接调用时返回值为0;当从longjmp()函数返回时,返回值为longjmp()函数的第二个参数的值,即retval值。
示例
本示例演示用setjmp()函数将当前系统堆栈信息保存在变量buf中,为longjmp设置跳转点。其具体代码如下:
运行程序,首先setjmp执行返回0,接着调用longjmp,跳转到setjmp并执行返回值为1。执行结果如图14.2所示。
图14.2 使用setjmp()函数保存当前系统堆栈信息