"); //-->
转自:https://blog.csdn.net/solo_ws/article/details/50043189
一、源文件如何根据#include来关联头文件
1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。
#include <xxx.h>
1
2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。
#include “xxx.h”
1
二、头文件如何来关联源文件
这个问题实际上是说,已知头文件“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”。
————————————————
原文链接:https://blog.csdn.net/familyshizhouna/article/details/81204090
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
模拟精英—与业内专家面对面互联4
PCIe 6.0借AI开启商用,7.0即将登场
紫光国微换帅,李天池接任
你为什么不做IT业的许三多?
模拟精英—与业内专家面对面互联3
Design_and_Operation_of_AGC_Loops
RF低噪声放大器的设计与稳定性分析3
华清远见嵌入式系统开发课程5
新升级CO₂传感器SCD43上市!
基于DS2770的非稳压电源脉冲充电器
想成为硬件工程师,难不难?
direct-convertion receiver-abb-design thessis
2005届毕业生求职
分立器件的多功能充电器原理图
学习嵌入式不可不知的十七个硬件概念,你知道几个?
让大模型训练更高效,奇异摩尔用互联创新方案定义下一代AI计算
模拟精英—与业内专家面对面互联2
改进的单级PFC变换电路
模拟精英—与业内专家面对面互联1
这个QQ牛!有谁不服吗?美女?
智能充电系统原理框图(TOP225Y)
由MAXl660构成的充放电系统
RF receiver system and circuits
鼎阳科技推出SDG3000X任意波形发生器,配备7寸大屏,支持40Mpts存储深度与1.2GSa/s采样率
助力半导体等精密测试!鼎阳科技发布精密源表SMM3000X系列
第四届“金领职场”高级人力资源洽谈会
通信工程和电子信息工程有什么差别呢~?
以 AMD 自适应计算技术进行虚拟制作
嵌入式硬件和软件谁更吃香?
哪位大哥用F2407做过交流电机调速系统,麻烦给个硬件电路图吧,谢谢~~