C/C++ の固定長データ型 質問する

C/C++ の固定長データ型 質問する

intなどのデータ型のサイズはプラットフォームによって異なる場合があると聞きました。

私の最初の質問は、プログラムがint4 バイトであると想定しているが、別のプラットフォームでは 2 バイトであると想定している場合、何が問題になるのか、例を挙げて説明してもらえますか?

私が持っていた別の質問は関連しています。人々がこの件をいくつかの で解決していることは知っています。typedefsたとえば、 、 などの変数がありますu8u16これらu32はプラットフォームに関係なく、8 ビット、16 ビット、32 ビットであることが保証されています。私の質問は、これは通常どのように実現されるかということです。(stdintライブラリの型について言及しているわけではありません。手動で、プラットフォームに関係なく、ある型が常に 32 ビットになるように強制するにはどうすればよいのか興味があります。)

ベストアンサー1

私は、人々がいくつかのtypedefでこの問題を解決していることを知っています。たとえば、u8、u16、u32などの変数は、プラットフォームに関係なく、8ビット、16ビット、32ビットであることが保証されています。

特定のサイズの型を持たないプラットフォームもあります (たとえば、char のサイズが 16 ビットである TI の 28xxx など)。このような場合、8 ビット型を持つことはできません (本当に必要な場合を除きますが、パフォーマンスが低下する可能性があります)。

これは通常どのように達成されるのでしょうか?

通常はtypedefで定義されます。c99(およびc++11)ではヘッダー内のこれらのtypedefだから、それらを使ってください。

プログラムが int を 4 バイトと想定しているのに、別のプラットフォームでは 2 バイトだとすると、何が問題になるのか、例を挙げて説明してもらえますか?

最も良い例は、異なる型サイズのシステム間の通信です。あるプラットフォームから別のプラットフォームに int 配列を送信する場合、sizeof(int) が 2 つで異なるため、細心の注意を払う必要があります。

また、int の配列を 32 ビット プラットフォーム上のバイナリ ファイルに保存し、64 ビット プラットフォームで再解釈します。

おすすめ記事