2016-04-08 25 views
3

構造体をCで宣言して、同時に定義することなく(つまり、インタフェースと実装を分離する)、他の人がプロジェクトにこれを組み込み、必要に応じて定義できるようにしたい(私のコードではパラメータとしてのみ使用されます)。だから、これは:構造体をC言語で宣言せずに宣言する

)私は可能性があります(多分マクロを使用して)かどうかを知りたいですか?

B)(私の特定の状況では)良い習慣を考えていますか?

Bは文脈なしでは答えにくく(やはり主観的です)、与えられた文脈(もしあれば)に対処するために、Cの共通の既存のパターンと照合したいと思います。

typedef struct { 
    bool logged_in; 
} Foo; 

私は、この(擬似コード)として希望:

typedef struct Foo; 

だから、この宣言は、その後、彼らのプロジェクトでこれを含めている人によって定義することができ、私は次のコードを持っています。私のコードでは、次のように、そのプロパティにアクセスすることなくパラメータとしてのみ使用しています。

ありがとう。

+0

'struct Foo;'は前方宣言で十分でなければなりません。 –

+0

ヘッダーファイル** foo.h ** –

答えて

4

このようにそれをフォワード-宣言:

typedef struct Foo Foo; 

その後の 'フルネーム' でそれを定義します。

struct Foo { 
    … 
}; 

それとも、単に 'フルネーム' フォワード宣言することができます。

struct Foo; 

そしてそれを使用してください:

bool bar(struct Foo *foo) { 
    … 
} 
+0

で定義してください。これは良い方法です。 –

+0

うわー、ありがとう、早かったです。私は自分のコンピュータに戻ってきたときにそれを与えます(現時点では答えられないことを確認することはできません) – willsquire

1

試しましたか?これはGCCの警告なしで私のためにコンパイルします:

typedef struct Foo_ Foo; 

int bar(Foo *foop) 
{ 
    return 1; 
} 

私はそれをしたくない理由は分かりません。

+0

ありがとう、それも行ってください – willsquire

関連する問題