非常に多くの構造を宣言した ah ファイルが 1 つあります。これらの構造を ac ファイル (ah ファイルを含めました) に初期化していますが、同じ ah ファイルを別の bc ファイルで再利用したいと考えています。ヘッダー ファイル ah を bc に含めると、複数の定義としてエラーが発生します。この問題を回避し、両方の .c ファイルで同じ .h ファイルを再利用するために何ができるか教えてください。
質問する
3618 次
4 に答える
6
ヘッダー ファイルで何かをインスタンス化してはいけません。つまり、何も定義せず、宣言するだけです。
宣言されたものごとに1 つの定義をC ファイルの1 つに配置extern
し、共有ヘッダーに宣言を含める必要があります。
でmydata.h
:
struct Foo {
float baryness;
float baziness;
};
extern struct Foo TheFoo;
1つのC ファイルで:
#include "mydata.h"
struct Foo TheFoo;
プロジェクトの他のヘッダー:
#include "mydata.h"
printf("the baziness is %f right now\n", TheFoo.baziness);
于 2012-04-18T09:19:34.973 に答える
3
は、a.h
変数ではなく、構造体のみを宣言する必要があります。または、変数を宣言する場合は、extern
定義の重複を防ぐために宣言する必要があります。(次に、.c ファイルの 1 つでそれらを 1 回定義します。)
このエラーは、同じ変数の複数の定義が原因で発生します。両方で同じ変数名を宣言しないようにしてくださいa.c
。b.c
于 2012-04-18T09:20:07.883 に答える
0
http://en.wikipedia.org/wiki/Include_guard
これを 2 回含める必要はありません。つまり、.h ファイルを次のようにラップします。
#ifndef _MY_H_
#define _MY_H_
/* codez go here */
#endif _MY_H_
于 2012-04-18T09:18:59.140 に答える
0
ヘッダー ファイルは次のように宣言する必要があります。
#ifndef MYHEADER_H
#define MYHEADER_H
struct MyStruct {
...
...
};
#endif // MYHEADER_H
したがって、このファイルを任意の数の .c ファイルに含めたとしても、その中の構造は 1 回だけ定義されます。
于 2012-04-18T09:28:52.870 に答える