9

型にALLCAPSをいつ使用するか、いつ追加_tするか(そしていつ何も使用しないか)などの命名の問題があるかどうか、私はいつも疑問に思っていました。K&RがCの使い方に関するあらゆる種類のドキュメントを公開していた頃は知っていましたが、これについては何も見つかりませんでした。

C標準ライブラリタイプの中で、_tかなり支配的なようです

time_t
clock_t
uint32_t
size_t
sig_atomic_t
...

、、またはとは対照的FILEに。これには実際にルールがありますか、それとも完全に恣意的ですか?Microsoftは、Windows APIのALLCAPSで常に型名を使用しています。これは、率直に言って、少なくともCライブラリよりも一貫性があるようです...va_liststruct tm

4

7 に答える 7

11

実際には、POSIX標準に従って、ここで定義されているように、_tで終わるすべての型名が予約されています。

'_t'で終わる名前は、追加のタイプ名用に予約されています。

于 2012-04-27T19:31:00.993 に答える
8

の使用を最小限に抑えるよう努めますtypedef。構造体にはキーワードを使用し、struct(a) 何かとして実装される可能性のある不透明な型を定義する場合、または (b) 将来または別の方法で変更する可能性のある算術型のエイリアスを定義する場合にのみ、typedef を使用します。構成 (たとえば、floatまたはを選択できるようにする場合double)。

いずれにせよ、ひどく醜いのですべて大文字を使用しないでください。また_t、POSIX によって予約されているため使用しないでください。型名に適切な接頭辞を付ければ、おそらく問題にはなりませんが_t、最後にあるのは不必要な醜さと不当な非移植性です。このように接頭辞を付けるだけで問題ありません: foo_scalar(fooライブラリ/モジュールの名前はどこにありますか)。

于 2012-04-27T22:23:48.673 に答える
4

それは完全に恣意的です-異なるライブラリ作成者/標準は異なる規則を使用します(またはまったく規則を使用しません)。コードに合わせて 1 つを選択し、一貫性を保ちます。

于 2012-04-27T19:25:46.220 に答える
3

あなたが言及するタイプは、標準(POSIXなど)やさまざまな主要な実装から何年にもわたって蓄積されてきた可能性があるため、何もありません。適切な例はxstrassert両方とも小文字のマクロです。ただし、C-FAQ 12.9を読んだことを確認してください。そうすれば、準備は万端です。

標準の予約済み識別子のセクションも調べてください。これが私のN1570のコピーが言っていることです:

7.1.3予約済み識別子

1各ヘッダーは、関連する副節にリストされているすべての識別子を宣言または定義し、オプションで、関連する将来のライブラリ方向の副節にリストされている識別子と、任意の使用またはファイルスコープ識別子としての使用のために常に予約されている識別子を宣言または定義します。—アンダースコアで始まり、大文字または別のアンダースコアのいずれかで始まるすべての識別子は、常に使用できるように予約されています。—アンダースコアで始まるすべての識別子は、通常の名前空間とタグの名前空間の両方でファイルスコープを持つ識別子として使用するために常に予約されています。

—次の副次句(将来のライブラリの方向を含む)の各マクロ名は、関連するヘッダーのいずれかが含まれている場合に指定されたとおりに使用するために予約されています。特に明記されていない限り(7.1.4を参照)。

—次の副節(将来の図書館の方向性を含む)およびerrnoのいずれかで外部リンケージを持つすべての識別子は、常に外部リンケージを持つ識別子として使用するために予約されています。184)

—次の副節(将来のライブラリの方向を含む)のいずれかにリストされているファイルスコープの各識別子は、マクロ名として、および関連するヘッダーのいずれかが含まれている場合は同じ名前空間のファイルスコープの識別子として使用するために予約されています。

2他の識別子は予約されていません。プログラムが予約されているコンテキスト(7.1.4で許可されている場合を除く)で識別子を宣言または定義する場合、または予約された識別子をマクロ名として定義する場合、動作は未定義です。

3プログラムが(#undefを使用して)上記の最初のグループの識別子のマクロ定義を削除した場合、動作は未定義です。

于 2012-04-27T19:31:44.957 に答える
1

最も一般的な規則は、マクロにすべて大文字 (のみ) を使用することです (それがたまたま型であるかどうかに関係なく)。

于 2012-04-27T19:26:22.793 に答える
1

ALLCAPS は一般的に (普遍的ではありませんが) マクロに使用され、私の経験では型定義に使用されることはめったにありません。私が見た型名の最も一般的な規則は、LeadingUpperMixedCase または _t サフィックスのいずれかです (他の人が指摘したように、これは POSIX との競合を引き起こす可能性があります)。

于 2012-04-27T20:41:47.037 に答える
1

すべて大文字は、定数やマクロに最も一般的に使用されます。私は Windows API 以外の型では遭遇したことがなく、お勧めしません。

uint8_t などは、標準からわかるように、型に名前を付ける非常に一般的な方法です。別の一般的な方法はThis、最初の文字の大文字のみのようなものです。

于 2012-04-27T19:54:12.533 に答える