错误';重复定义';编译引用一个头文件的两个C文件时

错误';重复定义';编译引用一个头文件的两个C文件时,c,header,definition,C,Header,Definition,我有两个C文件和一个标题,如下所示: 头文件Header.h: char c = 0; 文件1.c: #include "header.h" 文件2.c: #include "header.h" 我在编译时被警告“重复定义”。我理解原因,因为变量c在file1.c和file2.c中都定义了两次;但是,我确实需要在两个c文件中引用header.h。如何解决这个问题?首先,不要在标题中定义变量。在头文件中声明变量时,请使用extern限定符,并在一个(而不是两个)C文件或其自己的新文件(如果愿

我有两个C文件和一个标题,如下所示:

头文件Header.h:

char c = 0;
文件1.c:

#include "header.h"
文件2.c:

#include "header.h"

我在编译时被警告“重复定义”。我理解原因,因为变量c在file1.c和file2.c中都定义了两次;但是,我确实需要在两个c文件中引用header.h。如何解决这个问题?

首先,不要在标题中定义变量。在头文件中声明变量时,请使用
extern
限定符,并在一个(而不是两个)C文件或其自己的新文件(如果愿意)中定义它

标题:

extern char c;
实施:

#include <header.h>
char c = 0;

在头文件中使用
extern char c
,在
.c
文件中使用
char c=0

char c用于什么?您可能希望它是
extern char c
,或者如果您希望它是每个编译单元(源文件)的一个单独变量,那么您应该使用
静态char c

如果您不能修改头,那么作为黑客,您可以在一个(但不是两个)源文件中执行以下操作:

#define c d
#include "header.h"

这将导致
char c=0变成
字符d=0
,但当然,在使用
c
的任何其他地方,它也会变成
d
,因此它可能根本不起作用。

+1 b/c这是疯狂的,但对于使用大量第三方库调试嵌入式代码来说,这是一个非常有用的黑客!
#define c d
#include "header.h"