私は低レベルの非オブジェクト指向プログラミング言語の専門家ではなく、仕事中のプロジェクトのCコードを書く途中です。私はいくつかのまともな抽象データ型を作成しようとしています、そして、私は、人々が構造体ベースのADTを2つの方法で使用することを知りました。構造体としてデータ型を定義する人もいれば、ヘッダファイルで世界に公開する人もいます。structとstructの型をtypedefするのはいつですか?
その他は構造体へポインタなどのデータ型を定義:
// In .c file:
typedef struct adt_s {
//content here
} adt_s, *adt;
// In .h file:
typedef struct adt_s *adt;
私はプログラマのように、このアプローチは、あなたが、外の世界にこの構造体の内部で何の知識を与えることなく構造体をtypedefをすることを可能にすることを理解しますcan このデータ型を操作するために同じヘッダーファイルで提供される関数を使用します。
他のものを選ぶ理由はありますか?構造体としてADTを定義するときの一般的な「経験則」はありますか?構造体へのポインタとしていつ定義しますか?
を多分それは*のtypedef構造体S3_s 'の代わりに' typedefは構造体S3_s * S3'、ないのS3'を書く方が良いでしょうか? – Eregrith
@Eregrith:正式な言語セマンティクスの場合、 'typedef struct S3_s * S3'宣言子' * S3'は 'struct S3_s'型と' typedef'型の記憶クラスなので、アスタリスクに識別子を入れるのは実際には慣用的です;しかし、アスタリスクを型に入れることは、宣言について何人(ほとんどの人)が考えるかともっと調和しています。あなたが一貫性を持っている限り、どちらのバージョンも問題はありません。 – Christoph
私は、OPとの一貫性のためにその間隔を選択しました。 – Useless