今日のクロスプラットフォームC ++(またはC)の世界では、次のことができます。
Data model | short | int | long | long long | pointers/size_t | Sample operating systems
...
LLP64/IL32P64 16 32 32 64 64 Microsoft Windows (x86-64 and IA-64)
LP64/I32LP64 16 32 64 64 64 Most Unix and Unix-like systems, e.g. Solaris, Linux, BSD, and OS X; z/OS
...
これが今日意味することは、「共通」(符号付き)整数に対してint
は十分であり、C ++アプリケーションコードを記述するときにデフォルトの整数型として使用できることです。また、現在の実用的な目的のために、プラットフォーム全体で一貫したサイズになります。
ユースケースが少なくとも64ビットを必要とする場合、現在はを使用できますlong long
が、ビットネスを指定する型のいずれかを使用するか、その__int64
型の方が意味があるかもしれません。
これlong
は途中で残り、long
アプリケーションコードの使用を完全に禁止することを検討しています。
これは理にかなっていますか、またはlong
クロスプラットフォームを実行する必要がある現代のC ++(またはC)コードで使用する場合がありますか?(プラットフォームはデスクトップ、モバイルデバイスですが、マイクロコントローラー、DSPなどのようなものではありません)
おそらく興味深い背景リンク:
- C ++標準では、int型、long型のサイズはどのように規定されていますか?
- Win64チームがLLP64モデルを選択した理由は何ですか?
- 64ビットプログラミングモデル:なぜLP64なのか?(やや高齢)
long
少なくとも32ビットであることが保証されていますか?(これは、以下のコメントの議論に対処します。回答。)
long
32ビットを保証する唯一の方法です。int
16ビットにすることができるため、一部のアプリケーションでは十分ではありません。はい、int
現代のコンパイラでは時々16ビットです。はい、マイクロコントローラーでソフトウェアを作成します。Arduinosなどの増加は言うまでもなく、iPhoneやAndroidデバイスの増加に伴い、PCよりもマイクロコントローラーのユーザーが多いソフトウェアを書く人が増えていると主張します
int
はまだありませんが、まだ16ビットです。言いたくありませんが、「今日のクロスプラットフォームの世界」について書こうとするなら、インド亜大陸全体を無視することはできません。