转自:https://blog.csdn.net/solo_ws/article/details/50043189

一、源文件如何根据#include来关联头文件
1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。

#include <xxx.h>

2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。

#include “xxx.h”

二、头文件如何来关联源文件
这个问题实际上是说,已知头文件“a.h”声明了一系列函数,“b.cpp”中实现了这些函数,那么如果我想在“c.cpp”中使用“a.h”中声明的这些在“b.cpp”中实现的函数,通常都是在“c.cpp”中使用#include “a.h”,那么c.cpp是怎样找到b.cpp中的实现呢?
其实.cpp和.h文件名称没有任何直接关系,很多编译器都可以接受其他扩展名。比如偶现在看到偶们公司的源代码,.cpp文件由.cc文件替代了。
在Turbo C中,采用命令行方式进行编译,命令行参数为文件的名称,默认的是.cpp和.h,但是也可以自定义为.xxx等等。
谭浩强老师的《C程序设计》一书中提到,编译器预处理时,要对#include命令进行“文件包含处理”:将file2.c的全部内容复制到#include “file2.c”处。这也正说明了,为什么很多编译器并不care到底这个文件的后缀名是什么—-因为#include预处理就是完成了一个“复制并插入代码”的工作。
编译的时候,并不会去找b.cpp文件中的函数实现,只有在link的时候才进行这个工作。我们在b.cpp或c.cpp中用#include “a.h”实际上是引入相关声明,使得编译可以通过,程序并不关心实现是在哪里,是怎么实现的。源文件编译后成生了目标文件(.o或.obj文件),目标文件中,这些函数和变量就视作一个个符号。在link的时候,需要在makefile里面说明需要连接哪个.o或.obj文件(在这里是b.cpp生成的.o或.obj文件),此时,连接器会去这个.o或.obj文件中找在b.cpp中实现的函数,再把他们build到makefile中指定的那个可以执行文件中。
在Unix下,甚至可以不在源文件中包括头文件,只需要在makefile中指名即可(不过这样大大降低了程序可读性,是个不好的习惯哦^_^)。在VC中,一帮情况下不需要自己写makefile,只需要将需要的文件都包括在project中,VC会自动帮你把makefile写好。
通常,编译器会在每个.o或.obj文件中都去找一下所需要的符号,而不是只在某个文件中找或者说找到一个就不找了。因此,如果在几个不同文件中实现了同一个函数,或者定义了同一个全局变量,链接的时候就会提示“redefined”。

头文件和源文件的区别相关推荐

  1. c++中头文件和源文件的区别

    区别: 一般来说头文件提供接口,源文件提供实现 编译器规定源文件必须包含函数入口,即main函数.而头文件不得包含函数入口,头文件不可以单独编译成一个程序,仅仅包含程序片段或者定义常,变量. 头文件专 ...

  2. 结合编译过程,分析C++头文件和源文件的区别

    编译过程 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 预处理阶段 词法与语法分析阶段 编译阶段,首先编译成纯汇编语句,再 ...

  3. 五十、头文件和源文件的区别和规范(extern)

    头文件和源文件的区别和规范(extern) 文章目录 头文件和源文件的区别和规范(extern) (一)源文件为什么要包含自己的头文件 (二)为什么定义一定要放在.c文件里 (三)头文件和源文件的规范 ...

  4. 关于vs2022头文件和源文件的区别

    关于vs2022 头文件和源文件的区别 头文件用于函数.自定义类型声明,源文件用于定义.实现

  5. C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用

    1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...

  6. c 中头文件和源文件的区别是什么

    区别:头文件是".h"文件,提供接口:源文件是".cpp"文件,提供实现.编译器规定源文件必须包含函数入口,即main函数:而头文件不得包含函数入口,头文件不可 ...

  7. C++头文件和源文件,编译过程

    源文件如何根据#include来关联头文件  1.系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找. #include <xxx.h> 2.用户自定义的文件用双引号括起来, ...

  8. C++头文件和源文件的编译过程

    源文件如何根据#include来关联头文件 1.系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找. #include <xxx.h> 2.用户自定义的文件用双引号括起来,编 ...

  9. C语言头文件和源文件差异,#include两种引用方式差异

    一些初学c语言的人,不知道头文件(*.h文件)原来还可以自己写的.只知道调用系统库函数时,要使用#include语句将某些头文件包含进去.其实,头文件跟.c文件一样,是可以自己写的.头文件是一种文本文 ...

  10. 什么是c 语言中源文件,C++中头文件和源文件详细介绍

    C++中的头文件和源文件详解 一.C++编译模式 通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称 ...

最新文章

  1. 深入分析 Redis Lua 脚本运行原理
  2. 剑指offer64 不能使用乘除法、for、while、if、else、switch、case 求 1+2+...+n
  3. python 线程死锁_python线程死锁与递归锁
  4. oracle杀死进程时权限不足_当集群和数据库软件目录都被chown -R时,如何快速修复...
  5. Scala模式匹配:for循环表达式中的模式匹配
  6. python360百科_python抓取360百科踩过的坑!
  7. setTimeout里如果有$(this),$(this)指的是谁?
  8. ahci模式下无法启动Linux,电脑AHCI模式无法开启是怎么回事?
  9. java线程三种创建方式与线程池的应用
  10. webpack打包优化_提速MAX 京东通天塔WEBPACK构建发布优化实践
  11. 机器学习笔记——决策树之分类树
  12. JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
  13. 潜力环保类元宇宙项目地球超人解析
  14. ONF(Open Networking Foundation)
  15. Java买飞机票代码
  16. Kotlin GreenDao
  17. python打包成exe其他电脑运行不了_将python文件打包成exe程序,复制到每台电脑都可以运行-exe是什么文件...
  18. css3的高级特效 2D
  19. 1.4_7 Axure RP 9 for mac 高保真原型图 - 案例6 【旋转的唱片4】进度条_拖拽、点击
  20. 远程办公软件华为云WeLink高效视频会议指南(中篇:视频会议怎么投屏、怎么翻译?)

热门文章

  1. 625 Minimum Factorization
  2. Infrared and visible image fusion using total variation model(采用全变差模型的红外与可见光图像的融合)
  3. iMX8MM移植AC9260无线网卡
  4. 简单工厂模式(Java、Python)、工厂方法模式(Java、Python)
  5. Kubernetes——Kubernetes集群docekr部署
  6. QML中ListView向上滚动效果
  7. c# 异常(exception)
  8. godaddy的长期有效优惠码
  9. 【AppCan开发者故事 第八期】冯超:AppCan给我创业的勇气
  10. 安装Oracle12C提示Hard limit:maxinum open file descriptors的解决方法