开发者社区> 问答> 正文

C语言包含头的问题

小弟刚学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包含了这个头文件 其他文件什么都不包含呢? 对这块真是太搞不明白了

展开
收起
a123456678 2016-06-28 14:17:13 1972 0
1 条回答
写回答
取消 提交回答
  • 这个地方你需要了解下编译原理了,首先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者的实现在内存中是只有一份的。

    2019-07-17 19:48:16
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载