2016-12-03 4 views
1

У меня есть проект с открытым исходным кодом, который я хочу запустить/скомпилировать как на 32-битной, так и на 64-битной архитектуре. Но здесь возникает проблема: он много использует динамические массивы, и ему тоже нужно объединять свою длину. Динамические массивы имеют длину, хранящуюся в типе size_t, то есть ulong на 64 бит и uint на 32-битных системах.
У меня есть код, который выглядит примерно так:Проектирование программ для компиляции на 32 бит и 64 бит в D

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

мне нужно i к int (на 32-х) и long на (64-бит). size_t решила бы проблему, но это unsigned (либо uint, либо ulong).

Итак, мой вопрос заключается в следующем: как создать целочисленный тип данных, который равен int на 32 бит и long на 64 бит? Будет ли что-нибудь подобное ?:

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

Вы хотите ptrdiff_t. Как только size_t только что подписан. –

+0

Почему бы не указать явно, если он всегда будет соответствовать? –

+0

@SamiKuhmonen, потому что использование uint на 64 бит - это бред, я хочу иметь возможность воспользоваться компиляцией для 64-битного. – Nafees

ответ

1

Как обсуждалось в комментариях, есть уже подписанный указатель ширины целого типа. Он называется ptrdiff_t в D (и C и C++). Не определяйте свои собственные.

1

Попробуйте это:

version (X86) 
{ 
    // Declaration for 32 bit version 
    alias myint = int; 
} 
else 
{ 
    // Declaration for 64 bit version 
    alias myint = long; 
} 
Смежные вопросы