作者icetofux ()
看板C_and_CPP
標題[問題] 可以限制union的可視範圍嗎?
時間Sat May 5 15:01:37 2012
開發平台(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
推 stupid0319:這樣真的有比較方便嗎?? 05/05 16:03
→ firejox:typedef? 05/05 16:10
→ linotwo:如果 header 檔都沒有放 UserType 的宣告,應該不會有問題 05/05 16:35
→ linotwo:或是在各自的 cpp 裡面用不同的命名宣告,保證不會重複 05/05 16:37
→ linotwo:如果有在各自的 header 檔宣告 UserType 05/05 16:39
→ linotwo:可以用下列方式把宣告部分包起來 05/05 16:40
→ linotwo:#ifndef UNION_USERTYPE_HAS_BEEN_DEFINED 05/05 16:41
→ linotwo:#define UNION_USERTYPE_HAS_BEEN_DEFINED 05/05 16:41
→ linotwo:(宣告UserType) 05/05 16:42
→ linotwo:#endif // UNION_USERTYPE_HAS_BEEN_DEFINED 05/05 16:42
推 LPH66:其實你如果知道 #include 只不過是幫你剪貼而已的話 05/05 19:34
→ LPH66:就會知道即使自己貼和用 #include 的效果是一樣的了 05/05 19:35