//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
时间: 2024-10-12 09:19:41