错误';重复定义';编译引用一个头文件的两个C文件时
我有两个C文件和一个标题,如下所示: 头文件Header.h:错误';重复定义';编译引用一个头文件的两个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文件或其自己的新文件(如果愿
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"