小弟刚学C 有个问题不太明白
以前是做PHP的 所以对于include 来说 如果是单入口的项目 只要include一次 需要的文件就好了 其他地方不需要引入
但是C 好像也是单入口的 从main函数开始 那么为什么要每个文件都包含一次头文件呢
比如说
main.c
#include<stdio.h>
#include"mystock.h"
a.c
#include<stdio.h>
#include"mystock.h"
b.c
#include<stdio.h>
#include"mystock.h"
如果说 三个文件都用了上面两个头文件的函数 那么要包含三次 但是其实入口都是从main开始 可不可以直接main包含了这个头文件 其他文件什么都不包含呢? 对这块真是太搞不明白了
这个地方你需要了解下编译原理了,首先C/C++和PHP的区别
1) 一个是动态语言(PHP),一个是静态语言(C++)
2) C/C++编译的基本单位是文件,其中采用的是声明和实现分离的方式,这里的声明你可以理解为接口的一种抽象,声明是.h,实现在.c里。 对于 "stdio.h"和“mystock.h”,C++编译器做的首先是根据main.c、a.c、b.c里对着2个头文件的使用进行词法分析、语法分析等,然后编译出一个中间文件obj,编译没问题了再链接,这是有别于PHP的,所以在编译的时候这3者文件可能都被扫描了(是否完全扫描取决于编译器的实现),但最后链接的时候,这3者的实现在内存中是只有一份的。