Previous: Object Internals, Up: GNU Emacs Internals [Contents][Index]
以下はEmacsのCソースコード内で整数タイプを使用する際のガイドラインです。これらのガイドラインはときに相反するアドバイスを与えることがありますが一般的な常識に沿ったものがアドバイスです。
s
の長さをint
の範囲に収めることが要求されるのでなければint len =
strlen (s);
を使用しないこと。
ptrdiff_t
のかわりにsize_t
、intptr_t
のかわりにuintptr_t
)にたいして同様のアドバイスを適用できる。
int
を優先すること。より一般的には、たとえばスクリーン列数のようにint
範囲と既知である整数にはint
を優先すること。
ptrdiff_t
を優先すること。これは符号付きタイプにたいするEmacsの一般的な優先事項である。ptrdiff_t
の使用によりオブジェクトはPTRDIFF_MAX
に制限されるが、より大きいオブジェクトはポインター減算を破壊するかもしれず結局のところ問題を起こす可能性があるので、これは一方的に制限を課すものではない。
ssize_t
関連の制限をもつ低レベルAPIト対話する際を除いてssize_t
を避けること。これは典型的なプラトフォームではptrdiff_t
と等価だとしても、ssize_t
は範囲が狭いときがあり使用によりサイズ関連の計算がオーバーフローするかもしれない。同じくptrdiff_t
はより一般的で標準化されており、標準的なprintf
フォーマットをもち、Emacsの内部的なサイズオーバーフローのチェックの基礎である。ssize_t
を使用する際にはPOSIXガ-からSSIZE_MAX
の範囲の値にたいするサポートだけを要求することに注意してほしい。
intptr_t
を優先すること。現在のことこEmacsはintptr_t
を使用したほうがよいときに別のタイプを使用する場合がある。現在のEmacsのカレント移植先にたいして未修正でコードが動作するので修正の優先度は低い。
EMACS_INT
にもとづくのでEmacsで定義されたタイプEMACS_INT
を優先すること。
off_t
やtime_t
等の)システムタイプを優先すること。安全だと解っていなければシステムタイプが符号付きだと仮定してはならない。たとえばoff_t
は常に符号付きだがtime_t
は符号付きである必要はない。
printf
族の関数を使用してプリントされ得る任意の符号付き整数かもしれない値を表す場合にはEmacsの定義タイプprintmax_t
を優先すること。
intmax_t
を優先すること。
bool
、false
、true
を使用すること。bool
の使用によりプログラムの可読性が増して、int
を使用するより若干高速になる。int
、0
、1
を使用しても大丈夫だが旧スタイルは段階的に廃止される。bool
を使用する際にはソースファイルlib/stdbool.in.hに文書化されているbool
の代替実装の制限を尊重すること。特にブーリーンのビットフィールドはbool
ではなくbool_bf
タイプであること。そうすれば標準のGCCでObjective
Cをコンパイルするときでさえ正しく機能する。
int
は可搬性に劣るので、int
よりunsigned int
かsigned
int
を優先すること。単一ビットのビットフィールドの値は0か1なのでunsigned
int
かbool_bf
を使用すること。