Re: [問題] .h宣告和定義分開的理由
※ 引述《godman362 (Shizuru)》之銘言:
: 小弟寫程式也三年了
: 最近開始邁入小型的專案開發
: 但是我看了很多專案的程式碼
: 大多都是將.h檔的定義和宣告分開來放
: 我看過較多的說法是說不想將實作公開出來
: 但是我覺得這個說法似乎有些微的牽強
: 所以想請問一下各位先進,真正分開做的理由是甚麼?
: 還請各位指點一番。
一點愚見, 有錯的話請指正
C/C++ 的世界裡, 程式是以個別 source file
(.c/.cpp/.C/.cxx) 來 compile, 每個 source file
會 compile 成對應的 object file, 然後進入
linking 的階段, 把一堆 object file 連結起
來成為一個完整的 program.
每個 source file compile 的時候都會檢查你裡面
用的東西存不存在. 比如說你裡面用到 foo() function,
compiler compile 你的 src file 就會嘗試找究
竟 foo() 是不是存在的東西. 所謂存在, 可以是在
你的 src file 前面已經定義了, 又或者你在前面
宣告. compiler 看到宣告就會知道: "哦, 原來這個
function 會在另一個 source file 定義, 那麼我就當它
存在嘍." 是不是真的存在的檢查就是 linker 的工作.
而 header file 又是什麼? 其實就只是把那句宣
告放在另一個檔案裡面, 不然每個要用 foo() 的src
file, 都要自己宣告一次 void foo(); 既麻煩, 又難
maintain. 要記得 #include 的作用, 只不過是把
被include 的檔的完整內容安插在 #include 的位置而已.
以我的認知來說, header 簡單而言, 就是
開發某物 (X) 的人把 X 的宣告抽取出來, 讓其他人
可以簡單的在使用 X 的 source 中輕易作出 X 的宣告.
而所謂把實作隱藏, 我覺得不是本意. 比如在 class
declaration, 連所有 private member 都要寫, 何來
隱藏? (所以才有真的為了隱藏實作而用 Bridge pattern)
Alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
推
04/07 12:34, , 1F
04/07 12:34, 1F
推
04/07 12:34, , 2F
04/07 12:34, 2F
推
04/08 20:29, , 3F
04/08 20:29, 3F
討論串 (同標題文章)