个人写了3个文件,分别是
a.h
int a;
int b;
void cgab()
{
a=1;
b=2;
}
b.c
extern a;
extern b;
a=3;
b=4;
a.c
#include <stdio.h>
#include "a.h"
#include "b.c"//!!!!!注意这里!!!!!b.c已经被包括,不需要编译!!!!!!
void main()
{
printf("a=%d,b=%d\n",a,b);
cgab();
printf("a=%d,b=%d\n",a,b);
}
此时编译:gcc -c a.c,程序生成a.out,执行输出正常
如果此时编译:gcc a.c b.c -o a.out 。直接报错!multiple definition of
理由就是b.c已经被复制到程序内,不需要编译,此时如果你在各个文件中加上
#ifndef __XX_X__
#define __XX_X__
...
#endif
一样报错,无法解决,解决方法,原因就是编译多了个b.c造成的。