Re: [問題] 關於C++的基本問題
※ 引述《may1212.bbs@ptt.cc》之銘言:
> ※ 引述《GOLDMEMBER.bbs@bbs.cs.nctu.edu.tw (㊣SHISEIDO SUPERHARD)》之銘言:
> : 第一你就把「定義」這個名詞的意思弄錯了。
> 能不能請G大說明一下函式的宣告跟定義, 書上在這部份只有幾行帶過.
這個在我看已經算generic programming language的概念了,就是前面有人要
買中文版的Sebesta的書,或者另一本Sethi的書的範圍,所以前面才說你將來
應該會學到,那時用到的辭彙也會比較精確。這裡我就很草率地解釋一下。
在C這類的imperative languages當中函式一向都有兩種主要的寫法,一種是
所有的函式都寫在主程式前面,第二種是主程式放在所有函式前面。問題是不
管你怎麼寫,two-pass compiler(compiler的主要設計方法) 一定是依照file
stream的自然順序,從前面看到後面。在第一種寫法中不會有問題,因為函式
本體一定會在主程式之前給compiler讀到,這就保證所有函式在呼叫以前都會
得到定義。但是第二種寫法就不能這樣了,compiler會先看主程式再看其他函
式。既然各個函式還沒定義以前就會被呼叫到,我要怎麼保證在主程式中呼叫
函式的方式沒有錯誤?所以在這一種寫法中需要function prototypes.有了
function prototypes 之後函式和主程式的順序就脫鉤了,你可以任意寫,混
合也沒有關係,而且在第一種寫法中如果函式之間互相呼叫,那麼被人呼叫的
一定要寫在前面,在第二種寫法中無此限制。
另外一種狀況是separate compiling。在大型專案中會把主程式和各個函式分
開存成不同檔案,每次只針對有更動到的部份編譯,但是我要怎麼保證各個檔
案間互相呼叫的語法為正確,又不要勞動compiler在每次用到的時候就把用到
的檔案再找出來從頭看過?這也就是靠 function prototypes。.h檔就是function
protoypes 的集合,而.h檔對應的函式本體又預先編譯好變成.lib/.obj 或.o/.so,
然後一切再由linker包起來變成執行檔。
這些過程在現代的language IDE裡面都被藏起來了,你只能從一些指令中看到,
如Compile, Make, Build等等,現在也不需要懂,但是將來就會學到。我個人
是主張新手在開始階段先學書上的事情就好,不要想太多雞生蛋的問題,結果
可能是問題想了很多,程式卻寫得不夠,那就本末倒置。
--
I love GOOOOOOOOOOOOOOOOOOLD------
--
▄▄▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄ <telnet://bbs.cs.nctu.edu.tw>
█▄▄▄▄█ █ ▄▄▄▄▄█ Player: GOLDMEMBER
▄█▄▄▄▄█ ▄▄▄█ █▄▄▄▄▄ From: 59-115-194-181.dynamic.hine
☆ 次世代BS2 ☆ 可申請個人板 150MB 相簿 http://pic.bs2.to 交大資訊人 250MB
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章