久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放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. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      長(zhǎng)跳轉(zhuǎn)的實(shí)現(xiàn)

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

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

      長(zhǎng)跳轉(zhuǎn)的實(shí)現(xiàn)

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

      那么開(kāi)始了解長(zhǎng)跳轉(zhuǎn)(long jump)吧。
      長(zhǎng)跳轉(zhuǎn)(long jump)的原理是:設(shè)置一條語(yǔ)句的唯一標(biāo)識(shí)(setjmp(jmp_buf jmpb)),再通過(guò)長(zhǎng)跳轉(zhuǎn)(longjmp(jmp_buf jmpb, int retval))
      轉(zhuǎn)到j(luò)mpb所標(biāo)識(shí)的語(yǔ)句。

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

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

      再來(lái)看看它的使用例子吧。
      #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)));      /*當(dāng)使用longjmp跳回來(lái)的時(shí)侯,
                                             value為longjmp(jmp_buf jmpb, int retval)中的retval*/

          if(value==0)                       /*setjmp最初調(diào)用的時(shí)侯返回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);
      }

      運(yùn)行結(jié)果:
      Function “setjmp” return value: 0
      Be about to call longjmp…
      Be in longjmpfun
      Function “setjmp” return value: 10

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

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

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

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