[問題] 可以限制union的可視範圍嗎?

看板C_and_CPP作者時間13年前 (2012/05/05 15:01), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 為了方便將1個DWORD拆成4個byte處理,我製做了一個集合: union UserType { unsigned char _BYTE[4]; unsigned int _DWORD; }; 然後有一個專案中用到"FuncA.cpp"、"FuncB.cpp"、"FuncC.cpp", 且三個檔案中都會用到上述集合,一種作法是將該集合製作出新的 檔案"UserType.h"然後讓三個檔案都引用"UserType.h"。 但除此之外,有沒有辦法讓"FuncA.cpp"、"FuncB.cpp"、"FuncC.cpp" 都在內部定義"UserType"這個集合,並且讓編譯器知道當宣告"UserType" 型態變數的時候,是指該檔案中自己的"UserType"。 我試著再union前加入static,但似乎沒效果,編譯器還是跑出重複定義 的錯誤。 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.212.239

05/05 16:03, , 1F
這樣真的有比較方便嗎??
05/05 16:03, 1F

05/05 16:10, , 2F
typedef?
05/05 16:10, 2F

05/05 16:35, , 3F
如果 header 檔都沒有放 UserType 的宣告,應該不會有問題
05/05 16:35, 3F

05/05 16:37, , 4F
或是在各自的 cpp 裡面用不同的命名宣告,保證不會重複
05/05 16:37, 4F

05/05 16:39, , 5F
如果有在各自的 header 檔宣告 UserType
05/05 16:39, 5F

05/05 16:40, , 6F
可以用下列方式把宣告部分包起來
05/05 16:40, 6F

05/05 16:41, , 7F
#ifndef UNION_USERTYPE_HAS_BEEN_DEFINED
05/05 16:41, 7F

05/05 16:41, , 8F
#define UNION_USERTYPE_HAS_BEEN_DEFINED
05/05 16:41, 8F

05/05 16:42, , 9F
(宣告UserType)
05/05 16:42, 9F

05/05 16:42, , 10F
#endif // UNION_USERTYPE_HAS_BEEN_DEFINED
05/05 16:42, 10F

05/05 19:34, , 11F
其實你如果知道 #include 只不過是幫你剪貼而已的話
05/05 19:34, 11F

05/05 19:35, , 12F
就會知道即使自己貼和用 #include 的效果是一樣的了
05/05 19:35, 12F
文章代碼(AID): #1FfD1KdZ (C_and_CPP)