1

.h / .cカップル内のAPIのパブリック構造体の性質を隠したいので、.hでtypedefのみを宣言し、.cで次のように宣言を完了します。

foo.h

typedef struct filters_s filters_t;

/* some public functions declaration using filters_t */
(...)

foo.c

typedef struct filters_s filter_node_t;

struct filters_s
{
  filter_node_t *children[96];

  (...)
}

ご覧のとおり、filters_sは実際にはツリーのルートノードであるため、内部ではfilter_node_tを使用していますが、外部では、構造体の「ツリー」の性質を公開したくありません。ですから、私の「問題」は、理想的にはfilter_node_sのような構造体の別の名前も付けたいということですが、それが可能かどうかはわかりません。

4

1 に答える 1

3

構造体の実装を非表示にする場合は、構造体への不透明なポインターが必要です。そこで、構造体のデータを取得または変更する関数にこのポインターを渡します。

宣言は*.hヘッダーファイルにあります。そして、定義は*.cファイルにあります。

* .h(ヘッダーファイル)のこのようなもの:

typedef struct tag_device device_t;

次に、*。c(実装ファイル)で:

struct tag_device {
size_t id;
char *name;
};

void set_data(device_t *dev, size_t id, char *name)
{
dev->id = id;
dev->name = strdup(*name);
}

次に、*。c(ドライバーファイル)で

device_t *device = malloc(sizeof *device)

set_data(device, 1, "device02345");

これを入力したばかりなので、エラーをチェックしていないため、完全ではない可能性があります。使い終わったら、必ずメモリを解放してください。

お役に立てれば

于 2012-11-30T10:23:08.060 に答える