我希望自己的長度爲8個字節,而不管我是以32位模式還是64位模式編譯。我正在使用MSVC,在這一點上我不太在意跨平臺性。我試圖做這樣的事情如何在任何拱門上強制長度爲8字節的大小?
#define long __int64
或
typedef __int64 long;
但第一個結果在其他文件中,第二個大規模的編譯錯誤似乎是由編譯器本身是不能接受的。
我希望自己的長度爲8個字節,而不管我是以32位模式還是64位模式編譯。我正在使用MSVC,在這一點上我不太在意跨平臺性。我試圖做這樣的事情如何在任何拱門上強制長度爲8字節的大小?
#define long __int64
或
typedef __int64 long;
但第一個結果在其他文件中,第二個大規模的編譯錯誤似乎是由編譯器本身是不能接受的。
我不會改變保留類型的默認行爲。一個更好的做法是創建一個新的類型,如果你喜歡和使用它。
想起的情況下,當你包括thirdPartyLib和它的「h」文件中有這樣的事情:
void func1(long number);
當你的代碼中包含了「H」文件,它會看到「數量」參數設置爲64位但是當lib的原始「c」文件包括「h」時,它可以認爲「數字」是32位。這會在聯動階段造成問題。
我所有的代碼都被鎖定在一個特定的命名空間中,如果我只能在該命名空間內將「長」作爲「64位整數」工作,也許我可以避免你提到的問題? – 2013-02-24 12:24:00
這可能是一種可能性,但我仍然相信一個好的做法是創建一個新類型「myLong」,「myInt64」或任何64位。這對於誰讀取你的代碼的人來說也不那麼令人困惑。 – 2013-02-24 12:40:13
或者更好的是,只需使用總是64位的long long。 – 2013-02-24 12:42:20
這是不可能的。如果你關心位大小,那麼你應該包含stdint.h並使用int64_t。今天使用'long long'作品,但從現在起十年後可能無法使用。 – 2013-02-24 13:58:25