2010-12-19 8 views
0

ねえ。ヘッダーと複数のソース

struct something { 
     int a; 
     int b; 
}; 
int all[25][9]; 

このヘッダーファイルは、私のプロジェクトにあるすべての3つの.cファイルに含まれています。ファイルの1つ(メインファイル)はmain関数を持ち、他のファイルはメインファイルで使用される関数を持っています。また、extern型のvariableNameを使用して、このメインファイルで宣言されている変数も使用します。しかし、私はstruct something *stuff;を宣言し、それをメインファイル(そしてこれらの他のファイルはこのstuffと直接動作します)にmallocしていますが、私のall 2d配列はヘッダファイル以外は宣言されていません。これらの余分な.cファイルの1つでこの配列を使用します。このall配列は、それぞれに宣言されますか?私はそれをこのようにするべきですか?私の目的のために、そのヘッダファイルにはallへの参照が必須です。 allall[][]として宣言し、.cファイルなどのサイズを割り当てる必要がありますか?

答えて

3

あなたが複数のソースファイルと呼ばれる単一のアレイを共有したい場合はallあなたは、ヘッダー

extern int all[25][9]; 

を宣言し、

int all[25][9]; 

Cファイルのでなければなりません。

+1

いっそのは、ヘッダー内のtypedefを使用し、定義ではなく、逆の場合もあります。 –

+0

@ John Zwinck:その場合は、ヘッダーを定義するファイルにヘッダーを含める限り、コンパイルエラーが発生するはずです。 – caf

2

あなたのヘッダー内の配列を宣言するためにexternキーワードを使用:

extern int all[25][9]; 

それからちょうど1実装ファイルの中で、それをインスタンス化:

int all[25][9]; 

その他のCファイルには、ヘッダーを含めるとアクセスできますアレイ。

2

ではありません。このようにしてください。この方法では、ヘッダーを含むすべてのソースファイルにallの定義が作成され、同じオブジェクトの複数の定義は許可されません(可能であれば、各ソースファイルにallという別個のインスタンスが作成されるか、同じもの)。

代わりに、ヘッダファイルには、のみ入れ宣言:

int all[25][9]; 
0
: Cファイル(おそらくあなたの "メイン" あなたが言及ファイル)入れ、定義の中で次に

extern int all[25][9]; 

ヘッダファイル内で定義/宣言は

EXT int a; 

あなたがいつかヘッダーを変更する誰かで終わるしないように電子メインCファイルの使用

define EXT extern 
#include <a.h> 
#undef EXT 

これは、別々の定義を避けることができます/宣言

関連する問題