2016-12-03 19 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; 
} 
相关问题