2016-12-03 78 views
1

我有一個開源項目,我想在32位和64位體系結構上運行/編譯。但問題來了:它使用動態數組很多,並且也需要弄亂它們的長度。動態數組的長度存儲在size_t類型中,即64位上的ulong和32位系統上的uint
我有一些代碼看起來是這樣的:設計程序以在D中的32位和64位上編譯

int i = 0;//this HAS to be int, not uint for some reasons 
i = dynArray.length;//error, can't implicitly cast ulong to uint 

我需要iint(在32位)和long上(64位)。 size_t本來可以解決這個問題,但它是unsigneduintulong)。

所以我在這裏的問題是:我如何創建一個整數據類型是32位的int和64位的long?它會是這樣的?:

32bit{ 
    //Declaration for 32 bit version 
}else{ 
    //Declaration for 64 bit version 
} 
+4

你想要ptrdiff_t。像size_t剛剛簽署。 –

+0

那麼爲什麼不明確投下,如果它總是適合? –

+0

@SamiKuhmonen這是因爲在64位上使用uint是無稽之談,我想要能夠利用編譯爲64位。 – Nafees

回答

1

正如在評論中討論,不過已經有了簽約指針寬度整數類型。它在D(和C和C++)中被稱爲ptrdiff_t。不要定義你自己的。

1

試試這個:

version (X86) 
{ 
    // Declaration for 32 bit version 
    alias myint = int; 
} 
else 
{ 
    // Declaration for 64 bit version 
    alias myint = long; 
} 
相關問題