2011-12-20 17 views
3

我々は、リンクされたリストといくつかのtypedefed構造体を持っている:?typedefed構造体を配置する場所と方法は?

struct _list_node { 
    data_object *data; 
    struct _temp_list_node *prev; 
    struct _temp_list_node *next; 
}; 
typedef struct _list_node list_node; 

我々は 構造体_listnode含む(ヘッダ内のtypedefを配置し、他のファイルでAND LinkedList.cの両方でそれを含める必要があり

答えて

2

LinkedList.cで関数を呼び出す他のモジュールでこれらの定義が必要な場合は、ヘッダーファイルに入れてください。

LinkedList内でのみ使用されている場合。 c、そこでは秘密にしなさい。

1

一般に、リンクされたリストの外側にアクセスする必要がある場合は、ヘッダーに挿入します。

私は関数が構造体を変更できるようにする傾向があります。したがって、linkedlist.cは 'list_node'を扱うためのすべての関数を持つ必要があり、それらの関数はすべて.hで宣言されなければなりません。

2

はい、それはあなたがすべきことです:構造体とともにヘッダーにtypedefを入れてください。次に、構造体を使用するすべてのファイルにヘッダーをインクルードします(#includeを介して)。ヘッダーには、構造体の宣言を含む宣言が含まれます。これらの構造体と対になるtypedef宣言は、そこに自然に適合し、コードを見ている人がそこにいることがしばしば期待されます。私は特に上記を行うには気にしない

typedef struct { 
    data_object *data; 
    struct _temp_list_node *prev; 
    struct _temp_list_node *next; 
} list_node; 

が、たくさん:あなたは、もっぱらのtypedefを使用するつもりなら、あなたは完全にstructキーワードを使用してからあなたを未然に防ぐには、次の構文を、検討するかもしれませんそれはさらに適切なカプセル化のためにやりたいかもしれないlist_nodeの内部を抽象化します。

このヘッダを複数のファイルに含めるので、別の注記として、include guardsを使用することを忘れないでください。