C语言包含头的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

C语言包含头的问题

a123456678 2016-06-28 14:17:13 983

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

PHP C语言
分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:48:16

    这个地方你需要了解下编译原理了,首先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者的实现在内存中是只有一份的。

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程