試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

GLib 2が用意している基本的なデータ型について(ページ1/3)

C言語でGTK+ 2を扱う上での幾つかのメモ(第4回)」で一部触れているが、バージョン2系のGLibが用意している基本的な型についてを詳しくまとめておく。

C言語の標準と同じ型(環境依存)

C言語で標準で用いることのできる型をそのままGLib上で用いるもので、全ての環境でtypedef文によって別名を付けている(例えば標準のint型はGLib上でgintという型になる)。
符号なし版の型は「guint」のように「u」を付けて短く記述し、「unsigned gint」とはしない(間違いではない)。符号なし版は負の値が扱えない分だけ扱える正の値の範囲が広くなる。
ここに挙げるデータ型のbit数は環境依存となり、bit数/値の範囲に依存した使い方をするのには適さない。

GLibの用意する型の内、C言語の標準の型をそのまま用いるもの
型の説明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)
倍精度浮動小数点型*3double (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)
C言語の標準の型の範囲に関する値(マクロ)はlimits.h,「FLT_」「DBL_」系のみfloat.hに定義されている(上下限の値が必要な場合にそれぞれ「#include」で取り込む)。GLibの場合は追加のヘッダファイルの取り込みは不要。

char/gchar型の符号について

「signed」「unsigned」のいずれも付けずに変数を宣言するとき、intなど型の場合は符号付きとして扱うことになっているのに対し、char型では

char [変数名];

と宣言した場合に符号付きになるか符号なしになるかは処理系依存となるようだが、GLibのgchar型が「signed」付きでtypedefされているわけではなく、gchar型が符号なしになる環境が存在する可能性はある。もし、これにより問題が起こるような使い方をする場合、GCCでは-fsigned-charオプションを付ければ符号付きとみなすことはできるようだが、「符号付きで8bit」な整数のデータ型が必要な場合には、それよりも次のページで後述する「bit数保証な型」のうちの1つである「gint8」型を用いるとよい。

(「GLib 2が用意している基本的なデータ型について(ページ2/3)」に続く)

関連記事:

関連URL:

参考URL:

*1:整数型より表現できる範囲が狭い

*2:整数型より表現できる範囲が広い

*3:単精度浮動小数点型の倍の精度