4

非常に多くの構造を宣言した ah ファイルが 1 つあります。これらの構造を ac ファイル (ah ファイルを含めました) に初期化していますが、同じ ah ファイルを別の bc ファイルで再利用したいと考えています。ヘッダー ファイル ah を bc に含めると、複数の定義としてエラーが発生します。この問題を回避し、両方の .c ファイルで同じ .h ファイルを再利用するために何ができるか教えてください。

4

4 に答える 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.cb.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 に答える