[心得] C與C++的辯論

看板C_and_CPP (C/C++)作者 (tomex_ou)時間19年前 (2006/01/05 06:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
C語言是以function為基礎的循序性編程語言,但它缺乏如C++般物件導向的封裝特性,假 如並非侷限在某硬體條件或效能考量,我們應該選用C++來撰寫程式。 有些鄉民反對使用C++,覺得C就已經夠用且貼近電腦基本結構,不需再花費其他成本來架 構一個抽象介面。我承認這是Case By Case的思考邏輯,但不應該成為基本原則,因為 C++在本質上真的比C好! 其實C++在物件導向構面上也不夠C#先進,有時候在不新增關鍵字上使用#define語言來模 擬,反而讓程式顯得更dirty。例如,我最近在使用NeroAPI來開發光碟燒錄的功能,其 API要進行初始化,但其自訂結構變數不僅亂放(不統一放在某header檔)且大雜鍋的宣告 方式,導致初次使用前要一行一行trace其用法,相當地不人性。 若我來封裝NeroAPI,我會做好程式物件的分類及佈署方式,宣告型別上統一放在某個 header檔,並利用overloading的方式建立虛擬介面,把一般常用的變數先宣告好,使用 者只要這樣寫道: #include "NeroApi.h" void main() { NeroApi* nero = new NeroApi(); string* list = nero->Devices; nero->File->Add(path); nero->Folder->Add(dir); nero->Burn(); } 透過C++的特性,我可以封裝成上述這樣簡單的作法,而不需預先始初化一大堆不了解的 底層結構變數。試問,假如你使用C,你能這樣貼心封裝及轉化嗎? 我深深覺得,在編程路上只追求個人成就及利益最大化,終究會輸給團隊開發的,而C只 能撰寫功能良好的單一function,卻無法將彼此間的運作邏輯也一併寫入程式物件中,自 然是輸給C++的物件封裝功能。甚至該說,持不同意見各走各的路也沒關係,但一旦要提 供給別人使用,就該回歸軟體工程的原則,而不是堅持自己熟悉的工具及語言。 C/C++的#include語言早已令人詬病,因為標頭檔間的關係必須自己處理,問題是誰懂得 引入的順序及數量呢? 而C#的NameSpace概念則是在建構物件時,就能清楚彼此間的關係 及階層,自然在使用時就自動減少許多錯誤,這本來就該這樣做,但許多舊語言為了相容 性卻不願新增這樣的支援,注定最後要被淘汰。 我們身為新人,在沒有條件下,就該選擇延伸性高的語言,而不是還偏執C這樣古老的語 言,甚至為它護盤。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.20.171
文章代碼(AID): #13l53l-z (C_and_CPP)
文章代碼(AID): #13l53l-z (C_and_CPP)