看板Programming
标 题Re: 为什麽C++中要设计header file 这种东西
发信站枫桥驿站 (Tue Feb 10 02:42:32 2009)
转信站ptt!news.ntu!mars.scc.ntnu!ctu-peer!news.nctu!news.csie.ncyu!news.cs.n
※ 引述《[email protected] (陈扬和)》之铭言:
> 只是因为方便读吗 还是linker方便link?..
> 像java习惯上都没有 其实C++都放在一起 还是work..
> 为什麽要设计header file这种东西呢
你戴安全帽的时候, 是安全帽直接和头部黏死在一起还是可拆卸的呢?
header档和程式主档是性质不一样的东西. 就像安全帽不是你的头一样!
虽然它们都是一起工作, 重要性几乎不能分离, 就好像安全帽在骑车时
保护你的头一样!
但是毕竟它们不是同一种东西!
header档的设计当初就是为了你的头可以戴不同安全帽一样! 也许为了帅
气漂亮! 也许为了品质安全! header档的分离可以因为引入不同的定义档,
而造成主程式有不同的行为!
电脑世界是非常复杂的! 软硬体多到你不可能全懂! 如果有一天, 你同时
要为两种CPU 写驱动程式! 像INTEL 及Motorola!
两者的差别只要换一个小小的header档就可以各自编译的话, 有谁会去动
上千行的主程式?
header档就是要将主程式的相异点抽离出来! 或许是宣告, 或许是重新定
义!
类似 incA.h
#define MaxRange 4096
和 incB.h
#define MaxRange 32767
这两个标头档重新定义了各自适用的资讯. 如果你不用标头档来聚集差异
处. 上千个原始档你要到哪里去找, MaxRange 写在哪一行?
一个大专案都是成千上万个原始档的! 但是大家都共用同一种设定! 这就
是标头档的好处了!
标头档对原始档而言只有一行指令! 不会占单一原始档太大空间! 这对当
初超级电脑的主记忆体只有几Mbytes, 磁碟空间1MB 上万美金, 贵得吓死
人的时代, 不要浪费空间写一样的东西就是第一个目标!
第二个目标当然就是定义改换的问题!
当定义变更, 你想从上万个原始档找出应该修改的地方吗? 而且一次改变
上万个? 这时你就大大体会 "改一次, 到处适用" 的好处了! 一个标头档
改完, 只要全部重新编译联结,MAKEFILE 会帮你作所有该作的事! 上万个
档案一次改完, 完全不必您大人操劳! 这就是小小的header file 在背後
为您建功了!
只使用IDE 来写程式的人, 很难体会古早的过去, 利用MAKE.EXE/MAKEFILE
来维护程式的时代! 全是纯手工的!
我这里不是要你回到古代! 而是提醒你! C/C++ 作为一种系统语言. 它需
要有超人般的能力, 来处理超级专案可能有的所有程式档!
如果你没有大型程式的经验的话. 底下的想像可能会有替代性的帮助:
想像你的开发环境, 也许是大家习惯的整合性IDE.
如果你同时放上2 万个档, 哪会发生什麽事?
这两万个档不是要你真的自己写两万个! 你只要将相同的程式码复制两万
份. 改名成流水号00001.c 到 20000.c就好了!
你的IDE 吞得下来吗? 当你要在IDE 中找到某个参数, 进行新值修正, 你
该怎麽办呢?
当你体会到这种痛苦! 手工作业的痛苦! 你就真正能体会分离又自动连结
的标头档的好处了!
最後告诉你! 这种参数变更不是百万年才一次! 而是三不五时老板就会因
为新case就要你改! 所以手工作业是撑不久的! 请你珍惜自己的生命, 好
好利用标头档吧!
後注: 嘻笑怒骂不为别的. 加深印象而已! 我对肯深入研究学问的人, 一
向都有好感的!
--
※ Origin: 枫桥驿站<bbs.cs.nthu.edu.tw>
◆ From: tommy @61.229.169.101
1F:推 march20:所以java就没这种东西,因为没平台的问题@@ 71.136.231.182 02/10 18:53
2F:推 march20:(当然还是有啦, 只是不用 programmer管XD) 71.136.231.182 02/10 18:53
3F:推 zx1986:受教推! 163.23.231.89 02/11 00:19
4F:推 pshuang:用 make tool不是古早时代.现在也很多人用 59.104.56.223 02/11 15:30
5F:推 Bencrie:推楼上,Makefile到现在还是很好用 XD 140.121.197.32 02/11 23:12
6F:推 nosrep:header file是安全帽@@?220.128.189.250 02/18 14:14
7F:推 realmeat:我是古代人 =.=220.130.192.231 02/20 12:31
8F:推 joshua5201:推推推114.198.179.103 05/06 17:55