2011年1月3日 星期一

為什麼C++中要設計header

發信人: tommy.bbs@bbs.cs.nthu.edu.tw (在雲中游泳的魚), 看板: 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

※ 引述《sorryChen.bbs@ptt.cc (陳揚和)》之銘言:
> 只是因為方便讀嗎 還是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就要你改! 所以手工作業是撐不久的! 請你珍惜自己的生命, 好
好利用標頭檔吧!

後註: 嘻笑怒罵不為別的. 加深印象而已! 我對肯深入研究學問的人, 一
向都有好感的!

--
[;32m※ Origin: 楓橋驛站
[;32m◆ From: tommy @61.229.169.101
推 march20:所以java就沒這種東西,因為沒平台的問題@@  71.136.231.182 02/10 18:53
推 march20:(當然還是有啦, 只是不用 programmer管XD)  71.136.231.182 02/10 18:53
推 zx1986:受教推!  163.23.231.89 02/11 00:19
推 pshuang:用 make tool不是古早時代.現在也很多人用  59.104.56.223 02/11 15:30
推 Bencrie:推樓上,Makefile到現在還是很好用 XD  140.121.197.32 02/11 23:12

沒有留言:

張貼留言

您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.