型のバイト数を調べる2008年11月26日 02時15分13秒

C や C++ 言語では、int を始めとする整数型の大きさが定義されているわけではない。環境依存で、各最適な大きさを確保出来るように、ある程度の柔軟性が認められている。

異なったアーキテクチャやエンディアンを持つシステム間で、直接バイナリを交換するのには、全ての構造体の要素の大きさを完全に一致させる必要がある。

逆に言えば、エンディアン間の違いはバイトを入れ換えるしか無いが、OS やアーキテクチャなどを跨いで、構造体の内部構造を一致させることも可能だ。なるべく避けたい事態だが、時と場合によっては、必要になる。いちいち文字列に変換をしていたら、パフォーマンスが大幅に落ちるためだ。

以下のプログラムで、各型の大きさが調べられる。


#include <stdio.h>

int main(void)
{
       printf("type\t\tbyte\n");
       printf("void\t\t%zd\n", sizeof(void*));
       printf("char\t\t%zd\n", sizeof(char));
       printf("short\t\t%zd\n", sizeof(short));
       printf("int\t\t%zd\n", sizeof(int));
       printf("long\t\t%zd\n", sizeof(long));
       printf("long long\t%zd\n", sizeof(long long));
       printf("float\t\t%zd\n", sizeof(float));
       printf("double\t\t%zd\n", sizeof(double));
       printf("long double\t%zd\n", sizeof(long double));
       return 0;
}

何の変哲も無いコードだが、一回づつ必要になる度に書くのも面倒だ。

コメント

_ (未記入) ― 2009年02月10日 02時13分18秒

こういうときにマクロの # を使うんです。

#define PRINT_SIZE(ty) printf(#ty ": %d\n", sizeof(ty))

PRINT_SIZE(int);
PRINT_SIZE(long long);

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2008/11/26/3975831/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。