我在 C 中有一个问题,我不知道如何解决。假设我有 4 个 c 文件,ac;公元前; 抄送; dc,每一个都有一个.h文件:啊;bh; ch; dh,当然也包括在内。我想做以下事情:
啊将包含:
#include "b.h"
#include "c.h"
...
bh 将包含:
#include "d.h"
...
和 ch 还将包含:
#include "d.h"
...
在 dh 我定义了一个结构,例如, dh 的内容将是:
typedef struct address {
int address;
} address;
问题是我得到错误(当我编译文件时):
In file included from c.h:1:0,
from a.h:2,
from a.c:1:
d.h:3:16: error: redefinition of ‘struct address’
d.h:3:16: note: originally defined here
d.h:5:3: error: conflicting types for ‘address’
d.h:5:3: note: previous declaration of ‘address’ was here
我明白为什么会这样(因为 preproccesor 两次导入定义),但我该如何解决呢?我需要包含这样的方式(因为我当然有更多文件,这只是一个例子)。我能做些什么?
注意:我的makefile是:
project: a.o b.o c.o d.o
gcc -g a.o b.o c.o d.o -ansi -Wall -pedantic -o output
a.o: a.c a.h b.c b.h c.c c.h d.c d.h
gcc -c a.c -ansi -Wall -pedantic -o a.o
b.o: b.c b.h d.c d.h
gcc -c b.c -ansi -Wall -pedantic -o b.o
c.o: c.c c.h d.c d.h
gcc -c c.c -ansi -Wall -pedantic -o c.o
d.o: d.c d.h
gcc -c d.c -ansi -Wall -pedantic -o d.o
我认为没关系..它对我有用。感谢您的帮助。