Re: [問題] 如何用C思考?

看板C_and_CPP作者 (喲)時間12年前 (2012/04/28 09:55), 編輯推噓2(209)
留言11則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《LaPass (LaPass)》之銘言: : 程式碼(Code):(請善用置底文網頁, 記得排版) : int brain = 1/0; : 補充說明(Supplement): : 自己學過Java、C#、PHP、javascript,學程式語言的速度算快 : 因為被公司要求寫iPhone App的關係,現在開始學objective c : 稍微找了一下資料,知道objective c是建立在C的基礎上去擴充的 : 因此想先去把C給看一看,以及補一補,像是指標之類的,低階比較會用到的概念 : 於是我找了C Primer來看...... : 可是快速翻完後..... 發現少了非常多的東西。 : 例如..... : 沒throw new exception之類的東西 : 沒class、interface、物件導向之類的 : 沒Overload..... : 沒有委派、函數指標、反射、Lamba這種東西 : C Primer裡面看不到跟執行緒有關的章節..... : 但是我想問,C寫複雜的東西時,到底該怎麼設計? 輪到我回答你這個問題,來報答你了. 程式語言的威力,有一些語言內容直接涵蓋平台的許多東西,而有一些語言則是只掌握 最核心的部份. 要說威力誰強誰弱: 或許你認為.net把目前各種應用都做了基本元件,使它的程式庫 能涵蓋所有的需求,算是威力強大. 但是缺點就是如果需要一種過去沒做過的基本應用, 就要由微軟改平台. 至於另外一些語言,當它們可以定義新的語法,使語言本身的內容 擴充,這是另外一些人所認為的威力強大. C語言真的是如你所說的,要什麼沒什麼,因為是相對比較原始的語言. 關鍵詞才30幾個,當然是如果要做什麼東西就是多做一些工,或者沿用一些設計良好的 函式庫. 以 C 來說,也不必談像.net之前的DLL地獄及.net和Java的那些元件內容. 那些元件部份都是平台上的議題. 而 C 所攻的是更早年的議題是語言的精簡, 格式自由,以及語言的跨平台性. 而 Objective-C 雖然是從 C 延續出來的,但並不表示你需要從 C 這邊開始搭基礎. 二者的基礎應該不是一樣的. -----< 分格線 >------------------------ 來做一點類似比較語言學的研究嘛, C 語言: 1. 沒有 throws exception: C 仍是把bug狀態混雜在一起,也就是說,如果你發現 軟體有個例外情況使程式當掉,意思是程式執行走到某一個超限的狀態,解決辦法 是找到發生的位置然後在那個位置之前,找到涵蓋那些狀態的handles,調整到 不會讓程式狀態再跑超過那個限制範圍. 2. 沒有 class, interface: 沒錯. 因為風格就只是一般的程式語言. 不過, 搭建起各種抽象資料型態仍可以使用得不錯. 至於 interface 應該算是有基本的, 對於 *.h 標頭檔定義的介面,也有一份獨立的實作,只是不見得都可以改寫實作而已. 3. 以下刪除: (感謝uranusjr指正) C 語言有 overloading: 二個函數,只有當名稱相同,參數數目相同,而且參數型態 依序皆相同,才算是二個函數名稱互相衝突. 所以,可以定義下列函數名字一樣 的幾個函數: int a(char* b); int a(int b); int a(int b, int c); 這樣子應該也算是有機會做出多型的用法. 以下更正: C 語言沒有 overloading: 所以要靠其他程式方式來實現overloading,見以下連結 http://stackoverflow.com/questions/479207/function-overloading-in-c 4. C 語言可以做函數指標: 所以,既然做得出函數指標,應該也可以做得出類似委派 的事情. (此句刪除) 但是lambda方面,基本做不到,因為 C 語言的執行方式是 strict, eager. 5. 行程和執行緒: C 語言可以引用函式庫做 fork, 就可以做多行程. 另外也有 thread方面的函式庫. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.224.243

04/28 10:02, , 1F
C 沒有 function overloading...
04/28 10:02, 1F

04/28 10:24, , 2F
O_O ...... 是嗎?我一直以為有,糗了
04/28 10:24, 2F

04/28 10:26, , 3F
沒有overloading那就應該是要用struct參數了
04/28 10:26, 3F

04/28 10:27, , 4F
題外話,objective-c我記得MVC用很多
04/28 10:27, 4F

04/28 10:27, , 5F
obj-o反而滿注重一些軟工上的架構
04/28 10:27, 5F

04/28 10:28, , 6F
是obj-c語言本身MVC用很多,還是iOS app開發MVC用很多?
04/28 10:28, 6F
※ 編輯: yauhh 來自: 59.112.224.243 (04/28 10:42)

04/28 12:57, , 7F
感謝回答 ^^"
04/28 12:57, 7F

04/28 17:43, , 8F
我記得是obj-c本身mvc用的多
04/28 17:43, 8F

04/29 04:21, , 9F
直接學obj-c就對了,純C的部份只要看指標和標準函式庫
04/29 04:21, 9F

04/29 04:24, , 10F
沒有overloading,不過dynamic typing/binding就夠了
04/29 04:24, 10F

05/03 02:54, , 11F
好像因為沒有overloading 所以命名就會fun fun1 fun2...
05/03 02:54, 11F
文章代碼(AID): #1FcquHNk (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FcquHNk (C_and_CPP)