GLib 2が用意している基本的なデータ型について(ページ1/3)
「C言語でGTK+ 2を扱う上での幾つかのメモ(第4回)」で一部触れているが、バージョン2系のGLibが用意している基本的な型についてを詳しくまとめておく。
C言語の標準と同じ型(環境依存)
C言語で標準で用いることのできる型をそのままGLib上で用いるもので、全ての環境でtypedef文によって別名を付けている(例えば標準のint型はGLib上でgintという型になる)。
符号なし版の型は「guint」のように「u」を付けて短く記述し、「unsigned gint」とはしない(間違いではない)。符号なし版は負の値が扱えない分だけ扱える正の値の範囲が広くなる。
ここに挙げるデータ型のbit数は環境依存となり、bit数/値の範囲に依存した使い方をするのには適さない。
型の説明 | C言語の標準の型 (範囲) | GLibが用意する型 (範囲) |
---|---|---|
整数型/符号あり | int (INT_MIN - INT_MAX) | gint (G_MININT - G_MAXINT) |
整数型/符号なし | unsigned int (0 - UINT_MAX) | guint (0 - G_MAXUINT) |
短整数型*1/符号あり | short (SHRT_MIN - SHRT_MAX) | gshort (G_MINSHORT - G_MAXSHORT) |
短整数型/符号なし | unsigned short (0 - USHRT_MAX) | gushort (0 - G_MAXUSHORT) |
長整数型*2/符号あり | long (LONG_MIN - LONG_MAX) | glong (G_MINLONG - G_MAXLONG) |
長整数型/符号なし | unsigned long (0 - ULONG_MAX) | gulong (0 - G_MAXULONG) |
単精度浮動小数点型 | float (FLT_MIN - FLT_MAX) | gfloat (G_MINFLOAT - G_MAXFLOAT) |
倍精度浮動小数点型*3 | double (DBL_MIN - DBL_MAX) | gdouble (G_MINDOUBLE - G_MAXDOUBLE) |
文字型/符号なし | char (CHAR_MIN - CHAR_MAX) | gchar (CHAR_MIN - CHAR_MAX) |
文字型/符号あり | unsigned char (0 - UCHAR_MAX) | guchar (0 - UCHAR_MAX) |
char/gchar型の符号について
「signed」「unsigned」のいずれも付けずに変数を宣言するとき、intなど型の場合は符号付きとして扱うことになっているのに対し、char型では
char [変数名];
と宣言した場合に符号付きになるか符号なしになるかは処理系依存となるようだが、GLibのgchar型が「signed」付きでtypedefされているわけではなく、gchar型が符号なしになる環境が存在する可能性はある。もし、これにより問題が起こるような使い方をする場合、GCCでは-fsigned-charオプションを付ければ符号付きとみなすことはできるようだが、「符号付きで8bit」な整数のデータ型が必要な場合には、それよりも次のページで後述する「bit数保証な型」のうちの1つである「gint8」型を用いるとよい。
(「GLib 2が用意している基本的なデータ型について(ページ2/3)」に続く)
関連記事:
関連URL:
- http://www.sevo.kyushu-u.ac.jp/mail-list/win-users/msg00059.html - 「char型」が符号なしになる場合があるという例
- wikipedia:標準Cライブラリ
参考URL:
- http://web.archive.org/web/20080222233546/www.gnome.gr.jp/docs/glib-2.8.x-refs/glib/glib-Basic-Types.html - GLibが提供する型について/バージョン2.8系日本語訳
- http://library.gnome.org/devel/glib/stable/glib-Basic-Types.html - GLibが提供する型について/最新安定版(英語)
- http://web.archive.org/web/20080322030231/www.gnome.gr.jp/docs/glib-2.8.x-refs/glib/glib-Limits-of-Basic-Types.html - 型ごとの値の上下限/バージョン2.8系日本語訳
- http://library.gnome.org/devel/glib/stable/glib-Limits-of-Basic-Types.html - 型ごとの値の上下限/最新安定版(英語)