看板Programming
标 题Re: [问题] 关於C++的基本问题
发信站交大资讯次世代BS2 (Mon Oct 15 09:02:32 2007)
转信站ptt!ctu-reader!ctu-peer!news.nctu!csnews.cs.nctu!news.cs.nctu!BS2
※ 引述《[email protected]》之铭言:
> ※ 引述《[email protected] (㊣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