-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 回答