看板 C_and_CPP 關於我們 聯絡資訊
剛朋友問我 const int a=5566寫在.h 為什麼給兩個cpp include 沒有發生重複定義的問題 我之前有問過可是沒有答案@@ 爬文找不到我的文章了= = 請教一下我該怎麼跟他解釋 好像不曉得 可以用就好 不用管那麼多 但是還是很好奇.... 謝謝@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.73.81
fragileness:如果你是同一個.cpp可以找到兩個const int a=5566 01/12 23:55
fragileness:那才會重複定義吧 01/12 23:56
QQ29:不是這樣說吧 cpp是聯集的不是嘛 01/13 00:21
nowar100:一份.h給不同的.cpp不會重複定義阿 01/13 00:38
oddguy:樓主是否注意過.h檔開頭的“#ifndef”“#define”和最後的 01/13 00:38
oddguy:“#endif”? 01/13 00:38
nowar100:編譯是一個檔案compile完再編下一個阿 是獨立的事情 01/13 00:40
fragileness:如果是變數的話是有可能linker error 01/13 00:52
fragileness:const大概是因為在compile階段就已經決定值了 01/13 00:52
QQ29:喔板大我意思也不是那樣 = = 不太會表達 01/13 00:58
QQ29:to o大 跟ifndef也無關 因為.cpp是分別include 這支.h 01/13 00:58
QQ29:板主 我意思是const int a不加上 extern 或是static 就可以給 01/13 01:00
QQ29:別人include了 要是沒const這字 應該會出現重複定義才是阿 01/13 01:00
QQ29:到底這個現象該如何解釋 還是說compiler會自己加上static? 01/13 01:01
LPH66:應該是十樓說的原因 const 在 compile time 已經是定值了 01/13 01:04
QQ29:剛剛實驗結果 兩個.cpp印&a 位址差4 好奇怪.不是一份ㄟ 01/13 01:05
LPH66:(噗..數錯 是九樓 總之是 fragileness 版友) 01/13 01:05
LPH66:這樣的話也許 compiler 是視為類似 static 來處理的樣子 01/13 01:05
fragileness:http://0rz.tw/VnfXE 這個網址應該算有解釋到 01/13 01:07
fragileness:我承認我是前兩句推完覺得不太對才回去查的 XD 01/13 01:08
LPH66:看來原PO猜對了 的確是視為類似static(ie.internal linkage) 01/13 01:21