[問題] sturct/union extern後又定義 沒有問題?

看板C_and_CPP (C/C++)作者 (沒有暱稱)時間6年前 (2019/07/30 11:43), 6年前編輯推噓4(4016)
留言20則, 4人參與, 6年前最新討論串1/2 (看更多)
win10 compiler: Microchip xc8 In the header File: typedef union { uint8_t Bytes[4]; uint32_t Word; }BYTES_TO_WORD; extern BYTES_TO_WORD MyBytes; In the 'C' File with the declairation in it #include "commonheaderfile.h" BYTES_TO_WORD MyBytes; in other 'C' files #include "commonheaderfile.h" MyBytes.Word=123445677; 上述這樣是正常運作,結果我不小心在other 'C' file也下了BYTES_TO_WORD MyBytes; 編譯還是過,運作也沒問題,奇怪這樣不是重複定義? BYTES_TO_WORD MyBytes; 不就會給記憶體區塊了嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.7.85 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1564458186.A.ADE.html

07/30 11:46, 6年前 , 1F
07/30 11:46, 1F

07/30 11:52, 6年前 , 2F
你貼的是變數的重複宣告而已 並沒有重複定義吧
07/30 11:52, 2F

07/30 11:54, 6年前 , 3F
變數只要沒賦值都只是宣告 可是union只要下了就是定義
07/30 11:54, 3F

07/30 11:54, 6年前 , 4F
還是我理解錯誤
07/30 11:54, 4F

07/30 12:04, 6年前 , 5F
看起來跟我問的是同樣的問題 XD
07/30 12:04, 5F

07/30 14:55, 6年前 , 6F
你如果第二個定義給不同的初始值就會報error了
07/30 14:55, 6F

07/30 15:27, 6年前 , 7F
我在之後的main裡面有給值 沒有error
07/30 15:27, 7F

07/30 16:34, 6年前 , 8F
是給初始值喔,你兩個定義都沒給初始值是合法的
07/30 16:34, 8F

07/30 17:50, 6年前 , 9F
就是在定義的同時給初值才會掛?
07/30 17:50, 9F

07/30 17:50, 6年前 , 10F
可是沒給初值不就預設都0嗎?
07/30 17:50, 10F

07/30 17:57, 6年前 , 11F
剛剛試好像不會怎樣 等等再試試看
07/30 17:57, 11F

07/30 23:18, 6年前 , 12F
稍微再確認一下,應該是要兩個同時都給初始值才會掛
07/30 23:18, 12F

07/30 23:49, 6年前 , 13F
好 明天會再確認 謝謝
07/30 23:49, 13F
※ 編輯: anoymouse (59.115.118.133 臺灣), 07/30/2019 23:50:32

07/31 09:26, 6年前 , 14F
我剛剛用devC TDB-GCC 4.9.2試 大概就像你所說的要初始
07/31 09:26, 14F

07/31 09:27, 6年前 , 15F
化 才會出現multi-definition
07/31 09:27, 15F

07/31 09:27, 6年前 , 16F
但是我單晶片用的編譯器就不會有問題。
07/31 09:27, 16F

07/31 10:02, 6年前 , 17F
但是如果不在宣告結構變數時就賦值,還是會給結構變數
07/31 10:02, 17F

07/31 10:02, 6年前 , 18F
記憶體空間 然後成員內容會是0
07/31 10:02, 18F

07/31 10:03, 6年前 , 19F
如果有extern 兩個c檔的同個結構變數就會是同一個記憶
07/31 10:03, 19F

07/31 10:04, 6年前 , 20F
體空間 剛剛試的結果
07/31 10:04, 20F
文章代碼(AID): #1TFxpAhU (C_and_CPP)
文章代碼(AID): #1TFxpAhU (C_and_CPP)