作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] 大 Project Include的問題
時間Sun Jun 20 04:44:07 2010
問題: #include<file.h> 做了什麼事
答案:把 file.h 這個檔案的所有內容,直接取代 #include <file.h> 這行
問題:幹嘛要這麼做?
答案:某個 .c 檔難免會需要呼叫其他的 function,譬如 printf
但是compiler一定要看到 printf 長什麼樣子,才肯讓你呼叫,否則會錯誤
(噓 compiler: 沒圖沒真相!!)
這時把 printf 的長相擺在 stdio.h 裡,每次要使用就 #include <stdio.h>
這樣使用 printf 時,就可以知道它的長相,這樣 compiler 才不會抱怨
因此,當我們需要某個 function 時
就必須把擁有那個 function 長相的 .h 檔 #include 進來
但如果我們沒有呼叫那個 function,就根本不需要 #include 那個檔案
譬如說,如果你只用到 printf 而沒用到 sqrt 的話,那你 #include <math.h> 幹嘛?
(推 compiler: 謝謝大大分享,純推不下)
照原po的例子來說,有1000個.h檔,與1000個.c檔
每個.c檔如果都必須include那1000個.h檔
是否代表這些.c檔都會呼叫那些.h檔裡的函式?
原po說,用一個 A1.c #include 所有的 .h 檔,其他的只要 #include <A1.h>
但是如果 A2.c 需要用到 A2.h 裡的某個 function,那 compiler 一定會抱怨
(噓 compiler: 圖咧!!)
因此根本無法解決問題
同樣的,如果 A1.c 沒用到 A2.h 的任何 function,那幹嘛 include 這個檔案?
如果 A2.c 根本沒有呼叫 A2.h 的任何 function
那麼 A2.c 一開始就沒有必要 #include <A2.h>,砍掉這行就好了
我想重點會是:
(1) 把 #include 次數最小化,沒必要的就拿掉
假如每個 .h 檔都只有一個 function,1000 個也有 1000 個function了
難道每一個 .c 檔都有呼叫這 1000 個 function...??
(2) 把函式的 declare 與 definition 盡量分開,減少修改 .h 檔的機會
如果 Add.h 檔寫 int add(int a, int b) { return a + b; } 的話
那麼若改成 int add(int a, int b) { return a - b; }
(應該沒這種事情...)
所有 #include "Add.h" 的檔案都要重新編譯
如果只有寫 int add(int, int); 而把 { return a+b; } 的內容放在 Add.c 檔
若修改 .c 檔,也不會影響到 #include "Add.h" 檔的任何檔案,因為.h檔沒修改
(.h檔真的不應該常常修改的)
(3) 盡量做到模組化,1000個檔案盤根錯結很可怕,分成100組10個檔案一定比較好管理
(不過這個應該頗困難,整頓舊程式說不定比寫新程式還要累...)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.184.214
※ 編輯: james732 來自: 59.127.184.214 (06/20 04:59)
推 LPH66:囧..似乎原PO自砍了 (我覺得這串還滿值得留著給新手看的) 06/20 05:21
推 hilorrk:<----新手 06/20 07:28
推 adks3489:生動解說的好文XD 06/20 10:20