• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      用函數(shù)指針替代Switch/Case語句的程序設計方法

      2014-07-03 03:33:12龔松顯董銳劉躍宣
      關(guān)鍵詞:表達式語句代碼

      龔松顯,董銳,劉躍宣

      (總參通信訓練基地 教研部,宣化075100)

      引 言

      在單片機程序中,諸如鍵盤按鍵掃描、菜單處理等多種邏輯功能,在代碼上常采用Switch/Case語句的實現(xiàn)方式。Switch/Case語句是一種簡單、初級的邏輯表達式,當代碼較為復雜時,不利于程序的功能調(diào)試和邏輯修改[1],程序的可擴充性和可移植性都受到影響。為了在單片機常用的結(jié)構(gòu)化程序設計中避免Switch/Case語句過于冗長,提出一種使用函數(shù)指針來替代Switch/Case語句的實現(xiàn)思路,并給出兩種情況下的代碼模型。事實證明,該方法可使程序的結(jié)構(gòu)清晰、易于維護,可提高單片機程序的可讀性和設計效率。

      1 Switch/Case語句的代碼模型及特點

      1.1 Switch/Case語句代碼模型

      Switch/Case是C語言中的基本語句,其使用方法在大量教材及書籍中均有介紹[2],這里不再贅述。一般來說,Switch/Case語句代碼模型如下:

      在該代碼模型中,假定function函數(shù)形參及返回值均為void類型,其使用Switch/Case分支語句進行不同情況下的程序處理。Prm Value是從前面的程序處理代碼中獲得的表達式,Prm_A、Prm_B和Prm_C等常量是表達式的值。當表達式的值與某一個Case后面的常量表達式的值匹配時,就執(zhí)行此Case后面的語句。

      1.2 Switch/Case語句的不足

      從模型上可以看出,對于簡單的功能實現(xiàn),Switch/Case語句清晰、簡便;但當項目功能較為復雜,例如鍵盤數(shù)或菜單級數(shù)較多時[3],Switch/Case語句的判斷分支較多,導致代碼冗長,常常一個Case分支語句動輒跨越數(shù)十行,程序整體的可讀性和可移植性降低,程序的結(jié)構(gòu)不夠清晰。另外,當Switch/Case語句需要擴展功能時,需要在已經(jīng)臃腫的Case分支上繼續(xù)“添磚加瓦”,造成了程序語句的進一步冗長,不便于后期程序邏輯功能的修改。

      2 使用函數(shù)指針替代Switch/Case語句的兩種設計方法

      2.1 Case表達式的值連續(xù)情況下的設計方法

      在Switch/Case語句代碼模型中,較為常見的一種情況是:Prm_A、Prm_B、Prm_C等常量是連續(xù)的數(shù)值。對于這種情況,設計思路是定義相關(guān)的函數(shù)指針數(shù)組[4],然后實現(xiàn)相對應的函數(shù)。在使用時,只需調(diào)用對應的函數(shù)指針數(shù)組元素即可。該方式下代碼模型如下:

      在該代碼模型中,假定函數(shù)指針指向的函數(shù)形參及返回值均為void類型,Prm Value是從前面的程序處理代碼中獲得的表達式。設計方法中,將每個Case分支的處理代碼封裝成函數(shù),并將每個函數(shù)地址按照Case表達式的值的順序賦給函數(shù)指針數(shù)組各元素。在功能代碼中,程序的實現(xiàn)主體只需使用Prm Value的值調(diào)用對應的處理函數(shù)即可,原本冗長的Switch/Case語句被一條簡單的函數(shù)指針調(diào)用代替,形式較為簡潔。使用這種設計方法,當程序需要擴展新的功能邏輯的時候,只需要依次增加函數(shù)指針數(shù)組元素的值并實現(xiàn)對應的函數(shù),功能代碼的主體部分不需改動。需要注意的一點是,第2種的代碼模型中,假定Prm Value的值是從0開始的,對于Case表達式的值不是從0開始但Case表達式的值連續(xù)的情況,上面的代碼模型仍然可以使用。例如,如果Case表達式的值是從delta開始的,在這種情況下只需要將第2種代碼模型中的(p Fun[Prm Value])()表達式改為(p Fun[Prm Valuedelta])()即可,代碼的其他部分均可以保持不變。

      2.2 Case表達式的值離散情況下的設計方法

      第1種代碼模型中,在Prm_A、Prm_B、Prm_C等數(shù)值相差較大且不連續(xù)的情況下,如果仍然套用2.1節(jié)的設計方法,函數(shù)指針數(shù)組中需要人為填充大量冗余數(shù)據(jù),造成資源的浪費,并且在修改時需要做到精確的一一對應,程序的設計反而變得更為麻煩,失去了設計方法的本意。此時需要對第2種代碼模型進行增強設計。其設計思路是通過構(gòu)建一個數(shù)據(jù)結(jié)構(gòu),將離散的Case表達式的值和對應的處理函數(shù)一一對應,在功能代碼中對函數(shù)指針進行輪詢操作。其實現(xiàn)模型如下:

      在該代碼模型中,構(gòu)建的StructFun結(jié)構(gòu)體數(shù)組實現(xiàn)了Case表達式的值和函數(shù)指針的一一對應。當程序需要擴展新的功能邏輯時,只需要添加StructFun結(jié)構(gòu)體數(shù)組的內(nèi)容并實現(xiàn)對應函數(shù)體即可,設計方法的優(yōu)點與2.1節(jié)的設計方法類似。實際上,2.1節(jié)的設計方法是特殊情況下本設計方法的退化,兩種設計方法在思路上仍是保持一致的。

      結(jié) 語

      本文介紹的兩種使用函數(shù)指針替代Switch/Case語句的方法,使程序的任務處理邏輯關(guān)系變得簡潔明了,易于增加程序狀態(tài),更改程序邏輯,程序的可讀性、可調(diào)試性強,減少了單片機程序設計中的錯誤。筆者在工程項目中驗證了這兩種設計方法,實際可行且快捷有效,對于單片機常用的結(jié)構(gòu)化程序開發(fā)具有一定的借鑒意義。

      [1]張臘明,佟宇.狀態(tài)機技術(shù)在數(shù)據(jù)通訊協(xié)議棧中的編程應用[J].現(xiàn)代電子技術(shù),2008(3):146-147.

      [2]譚浩強.C程序設計[M].3版.北京:清華大學出版社,2008.

      [3]汪高勇,宋毅恒,尚舉邦.C51與單片機系統(tǒng)多級菜單的模塊化設計[J].光電技術(shù)應用,2009,24(2):62-66.

      [4]朱博,許倫輝.Keil C51中函數(shù)指針的使用[J].單片機與嵌入式系統(tǒng)應用,2008(5):71-72.

      猜你喜歡
      表達式語句代碼
      重點:語句銜接
      一個混合核Hilbert型積分不等式及其算子范數(shù)表達式
      表達式轉(zhuǎn)換及求值探析
      淺析C語言運算符及表達式的教學誤區(qū)
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      精彩語句
      如何搞定語句銜接題
      語文知識(2014年4期)2014-02-28 21:59:52
      永修县| 西丰县| 鄂州市| 寿阳县| 新泰市| 孝义市| 如皋市| 婺源县| 岳阳市| 陇南市| 合作市| 辛集市| 绥棱县| 南汇区| 金华市| 铁岭县| 延长县| 广丰县| 嘉兴市| 锦州市| 云浮市| 罗甸县| 湘潭县| 泾川县| 双峰县| 大英县| 郯城县| 唐河县| 丰顺县| 云浮市| 宕昌县| 洞头县| 进贤县| 贡嘎县| 阜城县| 柳州市| 巴东县| 二连浩特市| 林芝县| 贵南县| 枣强县|