2016-12-03 9 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は問題を解決しましたが、unsigneduintまたは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; 
} 
関連する問題