资讯详情

一个工程有.cpp,.h等很多文件,他们是怎么连接在一起的?

可以有多个CPP,但CPP的名字不能相同,因为编译的OBJ的文件是以CPP为单位。

不同CPP文件的函数可以通过声明的方式使用,通常声明放在H文件里,而想引用其它CPP文件的变量可以使用extern 这个也通常放在H文件 通过#include的方式加载 可以有多个.cpp, 甚至是多个.cpp,.c混合都是没有问题的,多个cpp时最好使用预编译头,也是就建立console工程的时候不选空工程,简单例程或HELLO WORLD程序,自己添加cpp代码文件时,确保在文件的头部写上#include 就可以了 ------解决方案-------------------------------------------------------- 每个.cpp文件作为一个编译单元,被编译成一个目标文件(.obj),它用目标语言来描述.cpp的内容。然后,用一个链接器将所有的目标文件链接起来,形成一个.exe文件。 换句话说,在第一阶段,每个.cpp都是独立编译的,互不干涉(当然可以使用公用的.h文件)。在最后链接时才归并在一起。所有在.exe中的实际地址,都是在链接时生成的。 比如说,a.cpp中调用了一个函数fun(),b.cpp中实现了函数fun()。 那么a.cpp编译成a.o时,会建立一个地址表,一种有一项 a_fun_address,用于调用函数fun()时的跳转地址。但是,这个地址在a.o中是不知道的,因此它声明需要这个地址,然后在调用fun()初写: call [a_fun_address] // 此处是调用fun的伪目标语言 而b.o中则从它的b_fun_address处开始写fun的实现。 如: b_fun_address: XXXX // 此处是实现fun的伪目标语言 然后在链接时,链接器将fun的实现(b_fun_address开始的目标代码)确定到某个地址上,并将这个地址回写到a_fun_address上。从而完成a中的调用。 全局/静态的结构(以及对象)也是类似的方法。类的函数则使用和函数相同的方法。(换句话说,在编译完成时,目标代码中没有类的概念了,而是拆成了函数和仅带成员变量的结构)。 以上只是C++编译的一种常用方式,也可以使用其他的方式(比如早期的C++编译器是把C++代码编译成等效的C代码,即不用链接,然后依靠C编译器完成进一步编译和链接的工作)。对C/C++而言,在编译之前还要进行预编译,也是不可或缺的一个步骤。 -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台