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
)にたいして同様のアドバイスを適用できる。
ptrdiff_t
を優先すること。これは符号付きタイプにたいするEmacsの一般的な優先事項である。ptrdiff_t
の使用によりオブジェクトはPTRDIFF_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
の代替実装の制限を尊重すれば、C99以前のプラットフォームにたいするEmacsの可搬性か保たれる。特にブーリーンのビットフィールドはbool
ではなく、bool_bf
タイプであること。そうすれば標準のGCCでObjective
Cをコンパイルするときでさえ、正しく機能する。
int
は可搬性に劣るので、int
よりunsigned int
かsigned
int
を優先すること。単一ビットのビットフィールドの値は0か1なのでunsigned
int
かbool_bf
を使用すること。