亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C語言中函數指針與軟件設計經驗總結

2020-05-23 13:24:22
字體:
來源:轉載
供稿:網友

函數指針與軟件設計

記得剛開始工作時,一位高手告訴我,說,longjmp和setjmp玩得不熟,就不要自稱為C語言高手。當時我半信半疑,為了讓自己向高手方向邁進,還是花了一點時間去學習longjmp和setjmp的用法。后來明白那不單是跳來跳去那樣簡單,而是一種高級的異常處理機制,在某些情況下確實很有用。

為了顯示自己的技巧,也在自己的程序中用過幾次。漸漸發現這樣的技巧帶來的好處是有代價的,破壞了程序的結構化設計,程序變得很難讀,尤其對新手來說。終于明白這種技巧不過是一種調味料,在少數情況使用幾次,可以簡化對問題的處理。如果把調味拿來當飯吃,一定會本末倒置,寫出的程序會呈現營養不良之狀。

事實上,longjmp和setjmp玩得熟不熟與是不是C語言高手,不是因果關系。但是,如果可以套用那位高手的話,我倒想說如果函數指針玩得不熟,就不要自稱為C語言高手。為什么這么說呢,函數指針有那么復雜嗎?當然不是,任何一個稍有編程常識的人,不管他懂不懂C語言,在10分鐘內,我想他一定可以明白C語言中的函數指針是怎么回事。

原因在于,難的不是函數指針的概念和語法本身,而是在什么時候,什么地方該使用它。函數指針不僅是語法上的問題,更重要的是它是一個設計范疇。真正的高手當然不單應該懂得語法層面上的技巧,更應該懂得設計上的方法。不懂設計,能算高手嗎?懷疑我在夸大其辭嗎?那我們先看看函數指針與哪些設計方法有關:

與分層設計有關。分層設計早就不是什么新的概念,分層的好處是眾所周知的,比較明顯好處就是簡化復雜度、隔離變化。采用分層設計,每層都只需關心自己的東西,這減小了系統的復雜度,層與層之間的交互僅限于一個很窄的接口,只要接口不變,某一層的變化不會影響其它層,這隔離了變化。

分層的一般原則是,上層可以直接調用下層的函數,下層則不能直接調用上層的函數。這句話說來簡單,在現實中,下層常常要反過來調用上層的函數。比如你在拷貝文件時,在界面層調用一個拷貝文件函數。界面層是上層,拷貝文件函數是下層,上層調用下層,理所當然。但是如果你想在拷貝文件時還要更新進度條,問題就來了。一方面,只有拷貝文件函數才知道拷貝的進度,但它不能去更新界面的進度條。另外一方面,界面知道如何去更新進度條,但它又不知道拷貝的進度。怎么辦?常見的做法,就是界面設置一個回調函數給拷貝文件函數,拷貝文件函數在適當的時候調用這個回調函數來通知界面更新狀態。

與抽象有關。抽象是面向對象中最重要的概念之一,也是面向對象威力強大之處。面向對象只是一種思想,大家都知道,用C語言一樣可以實現面向對象的編程。這可不是為了趕時髦,而是一種實用的方法。如果你對此表示懷疑,可以去看看GTK+、linux kernel等開源代碼。

接口是最高級的抽象。在linux kernel里面,接口的概念無處不在,像虛擬文件系統(VFS),它定義一個文件系統的接口,只要按照這種接口的規范,你可以自己開發一個文件系統掛上去。設備驅動程序更是如此,不同的設備驅動程序有自己一套不同的接口規范。在自己開發設備開發驅動程序時,只要遵循相應的接口規范就行了。接口在C語言中如何表示?很簡單,就是一組函數指針。

與接口與實現分開有關。針對接口編程,而不是針對實現編程,此為《設計模式》的第一條設計準則。分開接口與實現的目標是要隔離變化。軟件是變化的,如果不能把變化的東西隔離開來,導致牽一發而動全身,代價是巨大的。這是大家所不愿看到的。

C語言既然可以實現面向對象的編程,自然可以利用設計模式來分離接口與實現。像橋接模式、策略模式、狀態模式、代理模式等等,在C語言中,無一不需要利用函數指針來實現。

與松耦合原則有關。面向過程與面向對象相比,之所以顯得蒼白無力,原因之一就是它不像面向對象一樣,可以直觀的把現實模型映射到計算機中。面向過程講的是層層控制,而面向對象更強調的對象間的分工合作?,F實世界中的對象處于層次關系的較少,處于對等關系的居多。也就是說,對象間的交互往往是雙向的。這會加強對象間的耦合性。

耦合本身沒有錯,實際上耦合是必不可少的,沒有耦合就沒有協作,對象之間無法形成一個整體,什么事也做不了。關鍵在于耦合要恰當,在實現預定功能的前提下,耦合要盡可能的松散。這樣,系統的一部分變化對其它部分的影響會很少。

函數指針是解耦對象關系的最佳利器。Signal(如boost的signal和glib中的signal)機制是一個典型的例子,一個對象自身的狀態可能是在變化的(或者會觸發一些事件),而其它對象關心它的變化。一旦該對象有變化發生,其它對象要執行相應的操作。

如果該對象直接去調用其它對象的函數,功能是完成了,但對象之間的耦合太緊了。如何把這種耦合降到最低呢,signal機制是很好的辦法。它的原理大致如下:其它關注該對象變化的對象主動注冊一個回調函數到該對象中。一旦該對象有變化發生,就調用這些回調函數通知其它對象。功能同樣實現了,但它們之間的耦合度降低了。

在C語言中,要解決以上這些問題,不采用函數指針,將是非常困難的。在編程中,如果你從沒有想到用函數指針,很難想像你是一個C語言高手。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩精品在线| 欧美日韩国产成人| 成人久久精品视频| 久久久久99精品久久久久| 欧美性在线视频| 久久亚洲精品小早川怜子66| 欧美激情xxxx| 人人爽久久涩噜噜噜网站| 成人春色激情网| 国产视频久久久久| 欧美国产日韩精品| 福利微拍一区二区| 久久男人av资源网站| 久久av红桃一区二区小说| 国产精品美女在线观看| 精品夜色国产国偷在线| 美女视频久久黄| 久久99久国产精品黄毛片入口| 一本色道久久综合亚洲精品小说| 亚洲福利在线看| 一道本无吗dⅴd在线播放一区| 亚洲黄色在线观看| 中文字幕在线看视频国产欧美在线看完整| 国产日韩欧美在线观看| 伊人久久久久久久久久| 久久久久久九九九| 美女av一区二区三区| 亚洲欧美精品中文字幕在线| 91久久精品国产91性色| 精品国产精品自拍| 欧美国产视频一区二区| 欧美性生活大片免费观看网址| 久久九九有精品国产23| 日韩精品中文字幕久久臀| 色婷婷av一区二区三区在线观看| 国产精品黄页免费高清在线观看| 日韩欧美中文字幕在线观看| 中文精品99久久国产香蕉| 亚洲欧美日韩精品久久| 成人97在线观看视频| 国产欧美日韩视频| 亚洲精品欧美一区二区三区| 亚洲第一色中文字幕| 韩国精品美女www爽爽爽视频| 日韩va亚洲va欧洲va国产| 精品福利免费观看| 国产91av在线| 精品视频偷偷看在线观看| 亚州精品天堂中文字幕| 欧美亚洲另类激情另类| 精品国产91久久久久久老师| 国产精品一区二区av影院萌芽| 亚洲国产小视频| 91爱视频在线| 国产精品网站视频| 国产精品一区二区3区| 久久夜色撩人精品| 2019中文字幕在线| 91精品国产自产91精品| 久久噜噜噜精品国产亚洲综合| 欧美最近摘花xxxx摘花| 日韩视频―中文字幕| 欧美性生活大片免费观看网址| 国产精品久久久久91| 国产精品视频xxx| 亚洲精品xxx| 中文字幕一区电影| 亚洲一级一级97网| 欧美亚洲日本黄色| 欧美极品美女视频网站在线观看免费| 久久精品视频中文字幕| 久久国产精品久久久久久久久久| 欧美成人午夜激情视频| 欧美成人亚洲成人| 国产91精品视频在线观看| 欧美综合国产精品久久丁香| 欧美大成色www永久网站婷| 中文字幕精品www乱入免费视频| 国产精品久久久久91| 国产精品情侣自拍| 亚洲xxxxx电影| 亚洲欧洲日产国产网站| 国外成人在线视频| 亚洲娇小xxxx欧美娇小| 色哟哟网站入口亚洲精品| 国产成人一区二区三区| 国产精品第三页| 国产日韩av在线| 中文字幕精品www乱入免费视频| 国产亚洲美女久久| 日韩欧美高清在线视频| 欧美午夜视频一区二区| 中文字幕在线国产精品| 成人黄色短视频在线观看| 69久久夜色精品国产69| 欧美激情第三页| 欧美激情a∨在线视频播放| 欧美日韩爱爱视频| 欧美日韩激情美女| 久久精品免费播放| 久久99热精品| 国产成人精品综合| 成人乱人伦精品视频在线观看| 亚洲美女性生活视频| 91香蕉国产在线观看| 欧美午夜精品久久久久久久| 亚洲国产精品va在看黑人| 成年人精品视频| 亚洲激情久久久| 日韩精品极品在线观看播放免费视频| 成人国产精品av| 国产91露脸中文字幕在线| 97超碰色婷婷| 久久视频免费在线播放| 最近更新的2019中文字幕| 国产999精品久久久| 成人h视频在线观看播放| 久久亚洲国产精品成人av秋霞| 欧美激情xxxx性bbbb| 57pao精品| 超碰日本道色综合久久综合| 欧美一级淫片播放口| 久久青草精品视频免费观看| 欧美性xxxx18| 国产午夜精品视频| 国产精品久久久久久久9999| 欧美激情亚洲一区| 亚洲国产精品人久久电影| 欧美怡春院一区二区三区| 91亚洲国产成人精品性色| 庆余年2免费日韩剧观看大牛| 欧美午夜电影在线| 亚洲天堂av在线播放| 亚洲电影中文字幕| 国产精品1区2区在线观看| 亚洲综合小说区| 国产在线拍揄自揄视频不卡99| 美女久久久久久久久久久| 国产成人精品久久亚洲高清不卡| 国产综合久久久久久| 亚洲男人第一网站| 成人动漫网站在线观看| 欧美日韩激情网| 亚洲免费小视频| 91久久久久久国产精品| 国产一区二区三区在线观看网站| 欧美日韩国产丝袜另类| 亚洲二区中文字幕| 国产在线不卡精品| 国产精品久久久久久久久久ktv| 亚洲精品一区av在线播放| 亚洲一区二区三区毛片| 国产视频精品自拍| 久久久www成人免费精品张筱雨| 在线播放国产精品| 日韩一区二区精品视频| 亚洲激情成人网| 久久成人av网站| 精品国产一区二区三区久久狼黑人| 亚洲成人教育av| 欧美一级淫片播放口| 一本大道亚洲视频| 国产日韩欧美在线| 疯狂做受xxxx高潮欧美日本|