一、源文件如何根据#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”。
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090403/163909.html)
分享到:
相关推荐
visual studio 开发环境不能用快捷键切换头文件和源文件,给编程者带来了很大不便,本文就给出了,解决办法,按照本文操作,可以简单实现此功能。本文是在自己实现了后,然后在这里和大家分享,转点积分的。
通俗易懂的语言来解释C语言中,头文件和源文件的关系
头文件与源文件切换切换的SourceInsight宏,switch_cpp_hpp宏有一定的限制(要求在同一目录下),如源码结构为src、include、test时,include下头文件与src下源文件之间就不能实现切换。SwitchCppAndHpp宏对目录再...
源文件如何根据#include来关联头文件 头文件如何来关联源文件
自己编写的一个C++头文件转换源文件程序,用到MS的greta库、SkinMagic库,MFC下开发而成,软件开源,可自由传播,请保留作者信息。 觉得对你有用的麻烦顶下。
C++头文件与源文件[参考].pdf
里面包含ImageCapture.cpp,ImageCapture.h,Util.h
DSP2812 编程素材,头文件,源文件,cmd文件
源文件和头文件模板 源文件和头文件模板 源文件和头文件模板
自己总结的1602头文件及源文件和protues仿真,相配套
TI 官方F2812 编程所需文件—头文件,命令文件,源文件
为了生成一个可执行程序,MFC AppWizard[exe]向导必须首先创建一个项目,并为项目生成一系列初始文件,如C++头文件、C++源文件、资源文件和项目文件,其中的C++文件都是以MFC派生类为单元来组织的。 如果要从项目中...
lua程序实现:已知一个C/C++的头文件,自动生成相应的源文件
DSPF2812标准头文件源文件CMD文件
c# 简易绘制C语言头文件包含关系图 详细说明可以查看我的blog http://www.cnblogs.com/geeking/ 本工具使用了DotNetBar中的TreeGX控件。下载地址: http://down2.cr173.com/soft1/DotNetBarSetup.zip
源文件与头文件的区别:VC++6.0中Source Files,Header Files,Resource Files,External Dependencies区别
源文件 遗传算法类实现
压缩文件里面包括型号为F2812的dsp芯片的全部头文件、源文件和CMD文件,软件测试版本为CCS3.3,更高版本未检测,应该也能用,适合初学者使用。之前在CSDN上下载过一些这类的文件,很多的CPUTIMER文件都已破坏,该...
c++学生信息管理系统(所有文件包括头文件、源文件等)