2016-12-03 1 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이 문제를 해결했지만 unsigned (uint 또는 ulong)입니다.

내 질문은 다음과 같습니다. 즉, 32 비트에서 int이고 64 비트에서 long 인 정수 데이터 형식을 어떻게 만듭니 까? 이

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

당신은 ptrdiff_t를 원합니다. 방금 서명 한 size_t처럼. –

+0

왜 항상 명시 적으로 캐스트하지 않습니까? –

+0

@SamKuhmonen은 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; 
} 
관련 문제