久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      長跳轉(zhuǎn)的實現(xiàn)

      原帖及討論:http://bbs.bccn.net/thread-221066-1-1.html

      */ ————————————————————————————–
      */ 出自: 快樂編程 http://hi.bccn.net/108519
      */ 作者: neverTheSame E-mail:zhaoxufeng9997@126.com QQ:475818502
      */ 時間: 2008-6-1
      */ 聲明: 尊重作者勞動,轉(zhuǎn)載請保留本段文字
      */ ————————————————————————————–

      長跳轉(zhuǎn)的實現(xiàn)

      你想知道goto語句都實現(xiàn)不了的跳轉(zhuǎn)嗎?
      你想知道從一個函數(shù)跳轉(zhuǎn)到另一個函數(shù)的內(nèi)部的某個語句的原理嗎?
      你想知道怎么實現(xiàn)從一個函數(shù)跳轉(zhuǎn)到另一個函數(shù)的內(nèi)部的某個語句嗎?

      那么開始了解長跳轉(zhuǎn)(long jump)吧。
      長跳轉(zhuǎn)(long jump)的原理是:設置一條語句的唯一標識(setjmp(jmp_buf jmpb)),再通過長跳轉(zhuǎn)(longjmp(jmp_buf jmpb, int retval))
      轉(zhuǎn)到jmpb所標識的語句。

      先看一下setjmp和longjmp這兩個函數(shù)的用法吧。
      函數(shù)名:  setjmp
      函數(shù)原型:int _Cdecl setjmp(jmp_buf jmpb);
      作用:    設置非本地跳轉(zhuǎn)。即一個返回點,當程序調(diào)用longjmp函數(shù)(不論longjmp()和setjmp()是否在同一個函數(shù)或同一個作用域。)時,
                就可以返回到這個返回點,繼續(xù)從這個點往下執(zhí)行。
      形參:    jmpb用來保護現(xiàn)場。
      返回值:  首次調(diào)用返回0,當longjmp()返回時,調(diào)用返回值用longjmp()設定。

      函數(shù)名:  longjmp
      函數(shù)原型:void _Cdecl longjmp(jmp_buf jmpb, int retval);
      作用:    返回到setjmp()所設置的返回點。
      形參:    jmpb:用于恢復現(xiàn)場(由調(diào)用setjmp()時設置的)
                retval:返回到setjmp()所在的位置時,設置第二次setjmp()的返回值。
      返回值:  無

      再來看看它的使用例子吧。
      #include<stdio.h>
      #include<conio.h>
      #include<setjmp.h>

      void longjmpfun(jmp_buf jumpPointer);
      int main(void)
      {
          int value;
          jmp_buf jumpPointer;

          printf(“Function “setjmp” return value: %dn”,
          (value=setjmp(jumpPointer)));      /*當使用longjmp跳回來的時侯,
                                             value為longjmp(jmp_buf jmpb, int retval)中的retval*/

          if(value==0)                       /*setjmp最初調(diào)用的時侯返回0*/
          {
              printf(“Be about to call longjmp…n”);
              longjmpfun(jumpPointer);
          }
          else
          {
              printf(“Return to “setjmp” function”);
          }

          return 0;
      }

      void longjmpfun(jmp_buf jumpPointer)
      {
          printf(“Be in longjmpfunn”);
          longjmp(jumpPointer,10);
      }

      運行結果:
      Function “setjmp” return value: 0
      Be about to call longjmp…
      Be in longjmpfun
      Function “setjmp” return value: 10

      從上面的例子中,我們可以看出setjmp與longjmp的功能強大。

      作者建議:長跳轉(zhuǎn)是匯編語言到C語言的一種延續(xù),但一般情況不要用這種方法。這會造成程序的閱讀性與可理解性的災難。

      講解長跳轉(zhuǎn)的知識,只是讓大家了解有這么一種方法,希望大家只作學術上的探討,不要用之于實際工作中。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號