精華區beta C_and_CPP 關於我們 聯絡資訊
問題: #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