1. ホーム
  2. c

[解決済み] C言語ではsizeofは型のバイト数、オクテット数のどちらを返すのでしょうか?

2022-03-09 01:39:38

質問

C や variants では (仮想マシンの java とは異なり) ターゲットによってプリミティブ型のサイズが大きく異なることがあります。 stdint.h そして、その場合でも、実装がそれらをサポートする必要があります。

とにかく仮に(最近のマシンではバイトはオクテットなので、ネットワーク的には(ASCII)だと思いますが)、sizeofはデータ型のサイズをバイトで返すのかオクテットで返すのか?

どのように解決するのですか?

回答 sizeof で型のサイズを返します。 バイト .


sizeof(char) は100%保証されています。 1 しかし、これは1オクテット(8ビット)であることを意味するものではありません。


規格で証明されています。

6.5.3.4 のポイント 2 にある。

sizeof 演算子は、オペランドのサイズ(バイト単位)を返します。 である可能性があります。 式、または括弧で囲まれた型名です。サイズは,型から決定される。 オペランドを指定します。結果は整数になる。オペランドの型が可変長配列の場合、結果は整数となる。 そうでない場合は、オペランドは評価されず、その結果は 整数定数。

...

char 型、unsigned char 型、signed char 型のオペランドに適用した場合。 (またはその修飾バージョン) の結果は 1 です。 . オペランドが配列である場合、その配列は オペランドに適用される場合、結果は配列の総バイト数となる。 構造体または共用体である場合は,そのオブジェクトの総バイト数となる。 内部および末尾のパディングを含む。

また、3.6項のポイント3.

バイトは連続したビット列で構成され、その数は実装で定義される