国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C語言中函數指針與軟件設計經驗總結

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

2021-07-13 16:06李先靜 C/C++

今天小編就為大家分享一篇關于C語言中函數指針與軟件設計經驗總結,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

函數指針軟件設計

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

原文鏈接:https://blog.csdn.net/absurd/article/details/761943

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产黄色大片免费在线观看 | 精品一区二区在线观看 | 国产黄色一级录像 | 自拍偷拍一区二区三区 | 日韩高清中文字幕 | 大片免费播放在线观看视频 | 日韩av中文字幕在线播放 | 欧美不卡一区二区三区 | 免费污片网站 | 国产麻豆乱码精品一区二区三区 | 综合自拍偷拍 | 日韩在线视频观看 | 日本精品免费 | 国产亲子乱弄免费视频 | 亚洲成人一区在线观看 | 日韩一区二区三区四区 | 久久99精品国产99久久6尤 | 秋霞特色aa大片 | 99久久久无码国产精品 | 免费毛片网站 | 一级免费网站 | 亚洲一区在线播放 | 一色视频 | 亚洲欧美网址 | 亚洲欧美日韩精品久久奇米色影视 | 日韩超级大片免费看国产国产播放器 | 国产精品久久国产精品 | 免费成人黄色 | 久久久成人精品 | 亚洲毛片在线 | 欧美激情一区二区三级高清视频 | 亚洲成人aaaa | 国产欧美久久久久久 | 中国在线观看片 | 国产小视频自拍 | av大片 | 午夜视频在线观看网站 | 久久久九色| 亚洲国产中文字幕 | 欧美在线亚洲 | 成年人在线免费观看网站 |