2

すべてのOS(32/64ビット)およびすべてのコンパイラでサイズが64の64ビット型はありますか?

同じ質問は32ビットタイプにもあります。(それはintである必要がありますか?)

質問の起源は次のとおりです。2種類の命令を持つシステムを実装しています:

  1. 32ビット
  2. 64ビット

私は次のようなものを書きたい:

typedef int instruction32bit;

typedef long long instruction64bit //it is not correct some system have sizeof(long long) = 128 
4

3 に答える 3

7

int64_tあなたはとint32_t、または彼らの署名されていない友人uint64_tとを探していuint32_tます。cinttypesまたはを含めますcstdint

于 2013-01-11T22:56:41.903 に答える
3

コードを真に移植可能にしたい場合は、おそらく独自の型を型定義し、たとえば

   typedef int32_t instruction32bit;
   typedef int64_t instruction64bit;

これはほとんどの場合機能しますが、特定のシステム/コンパイラ/その他で機能しない場合は、次のように追加できます。

 #ifdef SOMEDEFINE
   typedef long long int instruction64bit;
   typedef int instruction32bit;
 #else
   typedef int32_t instruction32bit;
   typedef int64_t instruction64bit;
 #endif

もちろん、int32_t と int64_t をサポートしていないコンパイラ/OS (またはそのグループ) のモデルごとに、おそらく特別な#ifdef.

これは、真に移植性の高いすべてのコードが行うこととまったく同じです。なぜなら、「ほとんどすべてのコンパイラが X を実行している」ことをどれだけ見つけても、コードが十分に普及すれば、「Bob's Compiler Project」でコードをコンパイルしたい人が常にいるからです。にはこの機能がありません。もちろん、もう 1 つは、「ボブのコンパイラ」を使用する人に typedef 自体を編集させ、必然的に送信される「ボブのコンパイラには、これが必要です...」パッチを受け入れないようにすることです。

Carl Norum がコメントで指摘しているように、多くの場合、 を#ifdefに変換してから、やなどのジェネリック型を使用できます。#ifintlong

于 2013-01-11T23:05:15.803 に答える
0

とを使用uint_least32_tuint_least64_tます。固定サイズの型は、記述されている正確なサイズを持たないシステムには存在しませんuint32_tuint64_t

于 2013-01-12T12:00:09.140 に答える