作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題Re: [問題] VC6.0 function連結問題
時間Mon Apr 27 12:45:24 2009
看了一下
你的abc.h 在 a.c和b.c都有 include
這是你的 ifndef沒辦法避免的
你想著 include就是把內容抄一份到你include的.c檔裡面
這時你a.c和b.c都有include是不是就是抄兩份了呢???
然而你用ifndef只是可以擋著 假如你有a.h和b.h裡面都include abc.h的話
你main.c include a.h同時也include b.h時 可以擋掉 抄兩份abc.h的情況
(還有其他更複雜的情況 這比較直觀)
而你現在的問題出在
你abc.h 寫了實作 實作就是{ }
如果你只寫宣告 double sum(....); 這個不管你寫幾遍都沒差 (宣告可以重複
定義不能重複只能一次)
建議你把abc.h改成只寫 double sum();....
然後你在某一個.c檔案裡面include abc.h後(也可以不include)
重點是在要記得定義abc.h裡面宣告的函式
所以在那個.c檔案 再寫一次你現在abc.h寫的東西 { ...}
(就是定義他)
應該就可以了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.207.187
※ 編輯: QQ29 來自: 140.113.207.187 (04/27 12:50)
※ 編輯: QQ29 來自: 140.113.207.187 (04/27 12:54)
推 mouse0411:謝謝QQ大詳細的回答,我後改把fun.h改成fun.c就可以了 04/27 14:02
→ mouse0411:還是有點不太懂為何不能用#ifndef 04/27 14:02
→ QQ29:可以用阿 每次寫header .h檔案 寫這是好習慣 04/27 14:04
→ QQ29:只是 這個ifndef 你要想成 他只再同一個檔案作用 04/27 14:04
→ QQ29:你不能想成說 你include一次abc.h了 下次不管誰include 都 04/27 14:05
→ QQ29:不會去include了 這是不對的 04/27 14:05
推 mouse0411:那再請問QQ大一個問題,是因為我的function有要回傳值 04/27 14:10
→ mouse0411:才需要再用一個.h檔寫宣告嗎? 04/27 14:11
→ mouse0411:如果我的function沒有回傳值,是否就不用include 04/27 14:11
推 LPH66:和那個完全沒關係 每個function都是這樣 04/27 14:18
→ QQ29:簡單說就是 你別的檔案要用這函式 就該這樣寫 04/27 14:19
→ QQ29:不然應該就像上一篇推文的大大說要用inline了 04/27 14:19
推 mouse0411:ok~了解了,謝謝大大們的耐心回答~ 04/27 14:37