16

重複の可能性:
glibが型を再定義するのはなぜですか?

GTK + 2.0チュートリアルでは、データ型に関する次のステートメントをここで読むことができます。

前の例でおそらく気づいたことがいくつかあり、説明が必要です。表示されるgint、gcharなどは、それぞれGLibシステムの一部であるintとcharのtypedefです。これは、計算を行うときに単純なデータ型のサイズへの厄介な依存関係を回避するために行われます。

この説明の最後の部分がわかりません。Glibデータ型を使用する方が良いのはなぜですか?

4

2 に答える 2

11

チュートリアルで述べているように、それは移植性を確保することです。新しいシステムでglibを使用するコードを作成する場合、これらのタイプを使用するコードではなく、typedefを使用してヘッダーファイルを変更するだけで済みます。

C99標準は、glibタイプを廃止する固定幅タイプ(int8_t、uint32_tなど)を追加しましたが、glibはC99標準よりも前のものであり、おそらくそれが独自のタイプのセットを持っている理由です。

于 2012-12-11T14:01:09.410 に答える
5

Cデータ型は高度にプラットフォームであり、実装に固有です。たとえば、intは通常、汎用レジスタのサイズです。charはバイトと同じビット数を持ち、longはint(ただし少なくとも32ビット)より小さくないことを意味します。shortint少なくとも2バイトですが、実際にはintよりも小さい必要はありません。

したがって、適切に名前が付けられた短い変数を使用すると、移植性が向上します。

そしてGTK2.0チュートリアルがそれを置くように:

良い例は「gint32」です。これは、64ビットアルファでも32ビットi386でも、任意のプラットフォームで32ビット整数にtypedefされます。typedefは非常に単純で直感的です。それらはすべてglib/glib.h(gtk.hから含まれています)で定義されています。

編集:マイケルが言ったように、C99標準は新しいタイプを提供することによってそれらを時代遅れにします

于 2012-12-11T14:04:23.220 に答える