-1

「my_header.h」で定義しました

FILE *f;
char *logfile = "my_output.txt";
#define OPEN_LOG     f = fopen(logfile, "a")
#define CLOSE_LOG    fclose(f)

「my_source.c」では、このように使用しました

#include "my_header.h"
....
OPEN_LOG;
fprintf(f, "some strings\n");
CLOSE_LOG;

ただし、リンカーは言う

my_source.o:(.data+0x0): multiple definition of `logfile'

どうすれば修正できますか?

4

2 に答える 2

5

いつものように、ヘッダー ファイルで変数を定義しないでください。そのヘッダー ファイルを使用するたびに#include、その変数が再定義されるため ( #include== 「コピーして貼り付ける」ことを効果的に思い出してください)、表示されているリンカー エラーが発生します。

于 2011-08-21T12:08:18.043 に答える
2

新しいファイル(my_stuff.c)を作成し、そこにこれを含める必要があります。

char *logfile = "my_output.txt";

.cファイルは変数を定義します。次に、ヘッダーを変更して、定義の代わりにこれを使用します。

extern char *logfile;

これはそれを宣言にします。これで動作するはずですが、追加のモジュールをコンパイルして、リンクフェーズに含める必要があります。(これを行う詳細は、開発ツールによって異なります。)

于 2011-08-21T12:22:06.977 に答える