zoukankan      html  css  js  c++  java
  • 【C】——setjmp练习

    1 #include<setjmp.h>
    2 
    3 int setjmp(jmp_buf env);
    4     返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值
    5 
    6 void longjmp(jmp_buf env, int val);

      在希望返回的位置调用setjmp,直接调用该函数返回值为0;参数env的类型是一个特殊类型jmp_buf。这一数据类型是某种形式的数组,其中存放在调用longjmp时能用来恢复栈状态的所有信息。

      longjmp的两个参数,第一个是在调用setjmp时所用的env;第二个参数是具有非零值的val,它将成为从setjmp处返回的值。使用第二个参数的原因是对于一个setjmp可以有多个longjmp。

      

     1 #include<stdio.h>
     2 #include<setjmp.h>
     3 #include<stdlib.h>
     4 
     5 jmp_buf jmpbuffer;
     6 
     7 void prnt2()
     8 {
     9     printf("this prnt2
    ");
    10 
    11     longjmp(jmpbuffer, 2);    //每次调用函数的第二个参数不同,这是用来区分是哪个函数调用的longjmp
    12 }
    13 
    14 void prnt1()
    15 {
    16     printf("this prnt1
    ");
    17     longjmp(jmpbuffer, 1);
    18     prnt2();
    19 }
    20 
    21 int main()
    22 {
    23 /*
    24     if(setjmp(jmpbuffer) == 1){
    25         printf("this is print1's longjmp
    ");
    26         exit(0);
    27     }
    28     if(setjmp(jmpbuffer) == 2){
    29         printf("this is print2's longjmp
    ");
    30         exit(0);
    31     }
    32 */
    33     switch(setjmp(jmpbuffer)){
    34     case 0: printf("setjmp seccuss
    ");    break;
    35     case 1: printf("print1's longjmp
    ");    exit(0);    break;
    36     case 2: printf("print2's longjmp
    ");     exit(0);    break;
    37     }        
    38     printf("this main
    ");
    39     prnt1();
    40 
    41     exit(0);
    42 }
  • 相关阅读:
    NSWindow,一些有的沒的
    IT单身男士必看【找女友单身程序员】
    Base 64 Encoding 编码
    如何成为一名优秀的C程序员
    iOS学习笔记—ObjectiveC 委托、非正式协议、正式协议
    程序员学习能力提升三要素
    工程师如何不被PM欺负
    最常被程序员们谎称读过的计算机书籍
    一些重要的算法
    asp调用.Net 托管代码
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/3361483.html
Copyright © 2011-2022 走看看