Re: [問題] .h宣告和定義分開的理由

看板C_and_CPP作者 (Alien)時間15年前 (2009/04/07 12:04), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/4 (看更多)
※ 引述《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
推這篇 XD
04/07 12:34, 1F

04/07 12:34, , 2F
推這位大大的說明<(_ _)>
04/07 12:34, 2F

04/08 20:29, , 3F
推薦這篇文章XD
04/08 20:29, 3F
文章代碼(AID): #19sj2xlf (C_and_CPP)
文章代碼(AID): #19sj2xlf (C_and_CPP)