Re: [問題] multiple include
看板C_and_CPP (C/C++)作者uranusjr (←這人是超級笨蛋)時間13年前 (2012/12/05 00:06)推噓7(7推 0噓 26→)留言33則, 7人參與討論串2/2 (看更多)
※ 引述《singlovesong (~"~)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: linux g++
: 大家好
: 我在程式中寫了一個 util.h
: 然後我寫了一個 A.h 跟B.h
: A.h 裡面我 include 了 util.h
: B.h 裡面我 include 了 A.h 跟 util.h
: 請問這樣會有多重定義的問題嗎?
: 我以為應該會有 結果竟然可以成功compile 跟 link
: 想多了解一下甚麼情況下才會有這個問題 又為什麼我這樣寫沒這個問題呢?
: 是因為較新的compiler 幫我處理掉了嗎?
: 謝謝!
看名字就知道, 多重定義是要在有「定義」出現的時候才會發生
如果你的 util.h 長得像這樣:
class Foo;
void somFunction();
int calculateSomethingFromObject(Foo *foo);
然後你把實作放在 util.cpp, 並編譯 util.cpp A.cpp B.cpp 後連結
因為函數本來就只有一份, 而 forward declaration 只是宣告而已沒有重複問題
所以當然不會有問題
可是如果你的 util.h 包含這種東西:
struct UtilSetting
{
int bar;
bool baz;
};
那就會有重複宣告的問題
因為在編譯時編譯器會發現你的 B.h 裡有兩個重複的 UtilSetting 宣告
C/C++ 編譯器絕對不會幫你解決這個問題, 你要自己寫 include guards
至於為什麼它們不幫你解決, 這就是一個很好的問題, 我也想知道...
然後不論如何, 寫 header 的時候順手加上 include guards 是好習慣
即使不必要先加再說, 不會出事的
--
「我最想要的同伴嘛,首先是要笑口常開,其次是我們能永遠不會發生誤會。
如果這些都能辦到的話,嗯,如果他是世界上第一流的橋手,也還不錯。」
-- 班尼多‧加羅素,前義大利藍隊成員
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
推
12/05 00:58, , 1F
12/05 00:58, 1F
→
12/05 01:03, , 2F
12/05 01:03, 2F
推
12/05 01:47, , 3F
12/05 01:47, 3F
→
12/05 01:50, , 4F
12/05 01:50, 4F
→
12/05 01:51, , 5F
12/05 01:51, 5F
→
12/05 01:53, , 6F
12/05 01:53, 6F
→
12/05 01:55, , 7F
12/05 01:55, 7F
→
12/05 01:55, , 8F
12/05 01:55, 8F
→
12/05 02:50, , 9F
12/05 02:50, 9F
→
12/05 02:51, , 10F
12/05 02:51, 10F
→
12/05 02:51, , 11F
12/05 02:51, 11F
→
12/05 02:54, , 12F
12/05 02:54, 12F
→
12/05 02:55, , 13F
12/05 02:55, 13F
推
12/05 07:13, , 14F
12/05 07:13, 14F
→
12/05 07:13, , 15F
12/05 07:13, 15F
→
12/05 08:18, , 16F
12/05 08:18, 16F
→
12/05 08:19, , 17F
12/05 08:19, 17F
→
12/05 08:19, , 18F
12/05 08:19, 18F
→
12/05 08:20, , 19F
12/05 08:20, 19F
→
12/05 08:21, , 20F
12/05 08:21, 20F
→
12/05 08:22, , 21F
12/05 08:22, 21F
→
12/05 09:32, , 22F
12/05 09:32, 22F
推
12/05 12:55, , 23F
12/05 12:55, 23F
→
12/05 12:55, , 24F
12/05 12:55, 24F
→
12/05 12:55, , 25F
12/05 12:55, 25F
→
12/05 12:55, , 26F
12/05 12:55, 26F
→
12/05 12:55, , 27F
12/05 12:55, 27F
→
12/05 12:56, , 28F
12/05 12:56, 28F
推
12/05 15:22, , 29F
12/05 15:22, 29F
→
12/05 18:05, , 30F
12/05 18:05, 30F
→
12/05 18:06, , 31F
12/05 18:06, 31F
推
12/14 02:10, , 32F
12/14 02:10, 32F
推
12/14 02:13, , 33F
12/14 02:13, 33F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章