头文件,库文件,重复包含

//a.c

#include <stdio.h>
#include "a.h"
#include "b.h"
void main(void)
{
printf("safadf %d",i);
}
//a.c end
//a.h
#include "b.h"
//a.h end
//b.h
int i = 3;
//b.h end
/*本例中主程序在a.c中定义。
正常情况下,这三个文件都在同一目录下,进入该目录,然后执行
cc -c a.c表示编译a.c文件,编译的时候会把头文件中的内容都加载进来,在此例中,#include "a.h",而a.h中同样存在include,这时,a.h先把b.h中的内容:int i =3;加载进来,然后a.c在把a.h中的内容加载进来,所以a.c文件中的#include a.h最终被替换为为int i=3;等把全部的头文件加载进来以后,然后生成二进制格式的文件,这就是编译的过程。
编译过后本目录下就会出现a.o这个二进制文件,然后用命令cc -o a a.o
生成最终的可执行文件a,
*/

/*此例中,当执行cc -c a.c时,将所有的头文件都加载进来,主程序将变为
int i = 3;
int i = 3;
void main(void)
{
printf("safadf %d",i);
}
显然,i被重复定义了,所以编译会报错
*/
原文地址:https://www.cnblogs.com/saolv/p/9607302.html