这个问题实际上是说,已知头文件“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++头文件(xxx.h)与源文件(xxx.cpp)的关系

    头文件是不能被编译的: "#include"为编译预处理指令,其作用:源文件(xxx.cpp)中的#include "xxx.h"指令将xxx.h 中的代码在编 ...

  2. c++ 头文件的创建和使用,头文件与源文件的命名关系,#include <头文件> 和 #include “头文件“的关系

    创建头文件的三个步骤 以实现一个swap函数为例: 1.创建一个.h的头文件:里面允许存放类声明和函数声明 // swap.h #pragma oncevoid swaps(int a, int b) ...

  3. c++头文件|源文件详解

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

  4. 头文件和源文件关联的问题

        (对标题的解释:标题中的"源文件"是狭义的概念.小弟只是为了区分,把.h文件称为"头文件",把.cpp文件称为"源文件".)     ...

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

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

  6. c++ 头文件 .h 理解与实践

    头文件如何来关联源文件? 这个问题实际上是说,已知头文件"a.h"声明了一系列函数(仅有函数原型,没有函数实现),"b.cpp"中实现了这些函数,那么如果我想在 ...

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

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

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

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

  9. 头文件和源文件的连接

    文章转载于http://blog.163.com/yui_program/blog/static/18415541520115177852896/ 一.源文件如何根据#include来关联头文件 1, ...

最新文章

  1. Java线程池面试必备:核心参数、工作流、监控、调优手段
  2. 继承和多态二:虚析构函数
  3. C++学习之路 | PTA(甲级)—— 1043 Is It a Binary Search Tree (25分)(带注释)(精简)
  4. MySQL日常应用操作记录
  5. Java的native方法返回数组return Array(C语言)
  6. OpenShift 4 - Fedora CoreOS (4) - 用 Ignition 定制 CoreOS 的网络/存储等配置
  7. 重新认识鸿鹄与燕雀的区别
  8. 中间人攻击 - 攻防
  9. 国产数据库的里程碑式新突破:贵阳银行核心系统4.2亿订单采购易鲸捷
  10. 解决Windows Server 2008 System进程占用80端口问题
  11. [读书笔记]《刻意学习》
  12. 【一文读懂生物学重复与技术重复】
  13. mysql查看表内容_在mysql中怎样显示表里的内容 ?
  14. neo4j学习总结--第三课 Cypher(CQL)命令一
  15. 面试总结+感悟+分享
  16. Amazon 4.7 星评,领域新经典,了解服务设计就读它
  17. Android手写签名功能(包含画米字格,人名和书写轨迹)
  18. 单片机课程设计温控风扇(源代码+Proteus仿真图)
  19. 《大数据时代》读书报告
  20. 山东省职业院校技能大赛“H5交互融媒体内容设计与制作”比赛回顾

热门文章

  1. C语言实现数据保护算法(2)——AES加解密
  2. 软件设计模式与花边针法与书法
  3. 赚钱 36 计 - 第六计:老二计
  4. html5轮播怎么自动换图,js实现轮播图效果 纯js实现图片自动切换
  5. python写简单脚本_python写一个最简单的可执行脚本
  6. 助航灯光监控系统服务器,机场助航灯光计算机监控系统的设计与实现
  7. Building with Gulp
  8. git checkout -b develop origin/develop
  9. SEO网站排名刷量代码中的一些坑
  10. 农村小姑娘的麻辣作文+老师批语