我有一個「.c .h」夫婦。 在.h中定義了2個typedef結構,比如說TS1和TS2typedef知名度
現在,TS1的一個成員是TS2類型。 我想只使TS1可見,但不能TS2。 TS2應該只對相對.c文件可見。
我該怎麼做?
我有一個「.c .h」夫婦。 在.h中定義了2個typedef結構,比如說TS1和TS2typedef知名度
現在,TS1的一個成員是TS2類型。 我想只使TS1可見,但不能TS2。 TS2應該只對相對.c文件可見。
我該怎麼做?
我喜歡用'-internal'後綴命名專用頭文件。對於你的例子,我會有
foobar.c
#include "foobar-internal.h"
#include "foobar.h"
/* functions using `struct TS1` and `struct TS2` */
。
foobar.h
#ifndef H_FOOBAR_INCLUDED
#define H_FOOBAR_INCLUDED
struct TS1;
#endif
。
foobar-internal.h
#ifndef H_FOOBAR_INTERNAL_INCLUDED
#define H_FOOBAR_INTERNAL_INCLUDED
struct TS2 { int whatever; };
struct TS1 { int whatever; struct TS2 internal; };
#endif
使用功能的任何代碼,包括簡單的"foobar.h"
並且可以使用指針struct TS1
。它不能直接使用struct TS1
或struct TS2
類型的對象。事實上,通過只包含"foobar.h"
,代碼不知道在任何地方都存在類型,並且可以將其重新定義爲自己的目的。
usercode.c
#include "foobar.h"
struct TS1 *x;
x = newTS1();
work(x);
destroyTS1(x);
AFAIK,這是不可能的。但是您可以爲TS1和TS2設置兩個不同的.h文件。
我同意Rumple。
你可以做的是#define TS2 int
在.h和#undef TS2
位於.c文件頂部的#include
之後。
雖然這不使用typedef
。如果你想在多個.c文件中使用#include
,你也可以在.h文件的底部輸入#undef
。
成員聲明爲指針或結構? – tia 2011-04-15 14:04:59