“某事”的多重定义

时间:2011-08-21 12:04:32

标签: c multiple-definition-error

在“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'

我该如何解决?

2 个答案:

答案 0 :(得分:5)

与往常一样,不要在头文件中定义变量。因为每次#include该头文件时,该变量都将被重新定义(请记住#include ==“复制并粘贴”,有效),导致您看到的链接器错误。

答案 1 :(得分:2)

你应该创建一个新文件(my_stuff.c),然后在那里:

char *logfile = "my_output.txt";

.c文件定义变量。然后更改标题以使其代替定义:

extern char *logfile;

这使它成为声明。现在事情应该有效,但你必须编译额外的模块,并将其包含在链接阶段。 (这样做的细节取决于您的开发工具。)