设计程序在D中以32位和64位编译

时间:2016-12-03 09:07:21

标签: 64-bit d 32-bit cpu-architecture conditional-compilation

我有一个开源项目,我想在32位和64位架构上运行/编译。但问题出现了:它使用动态数组很多,并且需要弄乱它们的长度。动态数组的长度存储在size_t类型中,64位为ulong,32位系统为uint。 我的代码看起来像这样:

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
}

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:1)

正如评论中所讨论的,已经有一个带符号的指针宽度整数类型。它在D(和C和C ++)中称为 ptrdiff_t 。不要定义自己的。