[語法] const 寫在.h

看板C_and_CPP作者 (我愛阿蓉)時間14年前 (2010/01/12 23:52), 編輯推噓3(3018)
留言21則, 5人參與, 最新討論串1/1
剛朋友問我 const int a=5566寫在.h 為什麼給兩個cpp include 沒有發生重複定義的問題 我之前有問過可是沒有答案@@ 爬文找不到我的文章了= = 請教一下我該怎麼跟他解釋 好像不曉得 可以用就好 不用管那麼多 但是還是很好奇.... 謝謝@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.73.81

01/12 23:55, , 1F
如果你是同一個.cpp可以找到兩個const int a=5566
01/12 23:55, 1F

01/12 23:56, , 2F
那才會重複定義吧
01/12 23:56, 2F

01/13 00:21, , 3F
不是這樣說吧 cpp是聯集的不是嘛
01/13 00:21, 3F

01/13 00:38, , 4F
一份.h給不同的.cpp不會重複定義阿
01/13 00:38, 4F

01/13 00:38, , 5F
樓主是否注意過.h檔開頭的“#ifndef”“#define”和最後的
01/13 00:38, 5F

01/13 00:38, , 6F
“#endif”?
01/13 00:38, 6F

01/13 00:40, , 7F
編譯是一個檔案compile完再編下一個阿 是獨立的事情
01/13 00:40, 7F

01/13 00:52, , 8F
如果是變數的話是有可能linker error
01/13 00:52, 8F

01/13 00:52, , 9F
const大概是因為在compile階段就已經決定值了
01/13 00:52, 9F

01/13 00:58, , 10F
喔板大我意思也不是那樣 = = 不太會表達
01/13 00:58, 10F

01/13 00:58, , 11F
to o大 跟ifndef也無關 因為.cpp是分別include 這支.h
01/13 00:58, 11F

01/13 01:00, , 12F
板主 我意思是const int a不加上 extern 或是static 就可以給
01/13 01:00, 12F

01/13 01:00, , 13F
別人include了 要是沒const這字 應該會出現重複定義才是阿
01/13 01:00, 13F

01/13 01:01, , 14F
到底這個現象該如何解釋 還是說compiler會自己加上static?
01/13 01:01, 14F

01/13 01:04, , 15F
應該是十樓說的原因 const 在 compile time 已經是定值了
01/13 01:04, 15F

01/13 01:05, , 16F
剛剛實驗結果 兩個.cpp印&a 位址差4 好奇怪.不是一份ㄟ
01/13 01:05, 16F

01/13 01:05, , 17F
(噗..數錯 是九樓 總之是 fragileness 版友)
01/13 01:05, 17F

01/13 01:05, , 18F
這樣的話也許 compiler 是視為類似 static 來處理的樣子
01/13 01:05, 18F

01/13 01:07, , 19F
http://0rz.tw/VnfXE 這個網址應該算有解釋到
01/13 01:07, 19F

01/13 01:08, , 20F
我承認我是前兩句推完覺得不太對才回去查的 XD
01/13 01:08, 20F

01/13 01:21, , 21F
看來原PO猜對了 的確是視為類似static(ie.internal linkage)
01/13 01:21, 21F
文章代碼(AID): #1BJ9gk7K (C_and_CPP)