作者yauhh (喲)
看板C_and_CPP
標題Re: [問題] 如何用C思考?
時間Sat Apr 28 09:55:25 2012
※ 引述《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
→ uranusjr:C 沒有 function overloading... 04/28 10:02
→ yauhh:O_O ...... 是嗎?我一直以為有,糗了 04/28 10:24
→ yauhh:沒有overloading那就應該是要用struct參數了 04/28 10:26
→ diabloevagto:題外話,objective-c我記得MVC用很多 04/28 10:27
→ diabloevagto:obj-o反而滿注重一些軟工上的架構 04/28 10:27
→ yauhh:是obj-c語言本身MVC用很多,還是iOS app開發MVC用很多? 04/28 10:28
※ 編輯: yauhh 來自: 59.112.224.243 (04/28 10:42)
推 LaPass:感謝回答 ^^" 04/28 12:57
→ diabloevagto:我記得是obj-c本身mvc用的多 04/28 17:43
→ xcode:直接學obj-c就對了,純C的部份只要看指標和標準函式庫 04/29 04:21
→ xcode:沒有overloading,不過dynamic typing/binding就夠了 04/29 04:24
推 pichubaby:好像因為沒有overloading 所以命名就會fun fun1 fun2... 05/03 02:54