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

来源:本站
导读:目前正在解读《一个工程有.cpp,.h等很多文件怎么连接在一起》的相关信息,《一个工程有.cpp,.h等很多文件怎么连接在一起》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一个工程有.cpp,.h等很多文件怎么连接在一起》的详细说明。
简介:一个工程可以有多个CPP,但CPP的名字不能相同,因为编译的OBJ的文件是以CPP为单位。多个.cpp,.h文件是怎么连接在一起的?不同CPP文件的函数可以通过声明的方式使用,通常声明放在H文件里,而想引用其它CPP文件的变量可以使用extern 这个也通常放在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++而言,在编译之前还要进行预编译,也是不可或缺的一个步骤。

提醒:《一个工程有.cpp,.h等很多文件怎么连接在一起》最后刷新时间 2024-03-14 01:09:35,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一个工程有.cpp,.h等很多文件怎么连接在一起》该内容的真实性请自行鉴别。