怎樣讓C不這麼難

筆者最近在開始一些C的應用程序開發,主要在linux下進行,目標是跨平臺的應用程序。雖然是基於某開源程序進行開發,看了很多源碼,也動手擴展和修改了開源程序,感觸頗多。C實際上是語法最爲簡單的編程語言之一。可是在實際的開發中,尤爲是用C來開發一些系統應用程序,會感受到比Java之類的要難的多,到底是爲何呢?有人可能會說是手動內存分配的複雜性,字符串處理的不便捷...都沒錯,筆者認爲,總結一句話是標準化和工業化程度決定了使用的難易程度linux

若是咱們使用Java來開發一個程序,Java的標準化框架和包,會相對來講極大的規範程序員的編程行爲,爲程序員帶來相對很大的便利性。越是高層次的語言,這越是明顯。不少語言,將不少問題提煉到語法層面,經過增長語法的複雜度,從而強制性的讓程序員規範編程行爲和思路,也是一個緣由,好比絕大部分語言提供try catch來作異常捕獲。然而,C語言並無原生的try catch程序員

C語言,雖然有標準C庫,可是在使用的時候,每每會遇到不一樣平臺的差別,這也是爲何多數C程序須要經過configure在編譯程序前得到這些差別的緣由。因此即便是標準C庫,在跨平臺方面也有諸多問題。在Java等語言中,不少有差別的問題被重寫了,或者被屏蔽了,從而在標準庫方面更爲統一,所以易用性提升不少。算法

另外一個方面,當咱們要進行一些系統編程時,好比線程控制、文件讀寫、網絡讀寫時,平臺的差別更大。雖然,諸如POSIX等標準試圖解決問題,可是因爲Unix的各大分支(包括linux)長期的歷史緣由,依舊不能很好的作到統一。而在這方面,Java等語言在統一化方面作的就十分完整和到位。編程

C語言因爲語法十分簡單,致使程序員的編程行爲風格迥異。而面向對象的提出,使得程序員在編程行爲上有了一次高度的統一。C++是面向對象的先驅之一,然而因爲C++保留了對C的兼容性,反而也限制了C++在標準化上的進程。顯然,不會有人以爲C++比Java簡單。固然,C不是不能「面向對象」,面向對象不是一種語法,而是一種編程範式,只是C在「面向對象」時並無咱們熟知的範式而已。並且大部分的C程序不採用面向對象,面向對象也不見得是萬能藥。在使用Java標準庫以外的第三方庫時,之因此以爲沒有違和感,緣由之一就是你們都遵循了面向對象的原則。固然,不一樣的語言的範式原則不必定是面向對象。網絡

那麼,若是要基於C語言來作開發(應用程序),應該如何開展呢?究竟要作些什麼準備呢?經過閱讀源碼,筆者認爲,程序員應該有意識的積累和準備一些經常使用的數據結構和算法、系統封裝,還須要對系統底層有比較深刻的理解,這樣就能造成一層標準層,有了這個標準層,算是入門,而且有能力開始工程實踐了。不然舉步維艱。數據結構

一般來說,這些標準層包含:框架

  • 內存池。提升內存分配和管理的效率和便利性,甚至能夠本身實現GC。socket

  • 日誌。日誌之因此如此重要,你懂得,別期望IDE來調試。數據結構和算法

  • 異常處理。利用C庫和宏,實現一個try catch,會十分有用。編程語言

  • 字符串處理。便捷的字符串處理毋庸置疑是極其重要的。

  • 經常使用的數據結構。好比:list、map、array。

  • 封裝並屏蔽平臺差別。好比socket、thread、file等系統直接相關的調用。

針對上述的內容,筆者會結合開源軟件,逐步作一些總結。

相關文章
相關標籤/搜索