首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求教c++编译有关问题

2013-01-04 
求教c++编译问题一个工程里有几个cpp和.h头文件,是不是运行之前就编译好了(vc编译器)。还是先找main函数所

求教c++编译问题
一个工程里有几个cpp和.h头文件,是不是运行之前就编译好了(vc编译器)。
还是先找main函数所在的cpp文件,然后预编译里面包含的头文件,然后再根据头文件的内容(如类的定义)编译相应的cpp文件(里面有类的实现)。

还是运行到具体函数在去找相应的cpp文件去编译。
[解决办法]
举个例子,比如总共有5个文件!
a.cpp a.h b.cpp b.h 和一个main.cpp,main.cpp里面调用了a.cpp里面的函数,而a.pp里面调用了b.cpp的函数。

C/C++的编译流程是,预处理,编译,汇编,和链接。在链接之前,几个cpp文件是不相关的,比如main.cpp里面调用了a.cpp里面的一个fun_a(),其实在编译(指生成二进制的文件main.o)main.cpp的时候,只要main.cpp包含的头文件里面有fun_a()这个函数声明即可,至于这个函数是在哪个文件里面实现的,或者这个函数根本就没有实现,这都不会对前面三步产生影响。所以在链接之前,所有cpp文件是独立的。
链接的时候会发生关联,比如最后要生成一个可执行文件,main函数在main.o里面,链接时依赖于main.o,而main.o里面调用了a.o里面的函数,因为最后生成的可执行文件,里面包含了程序的所有指令,fun_a()的指令在b.o,所以链接的时候也必须包含a.o,同理也必须包含b.o了。

注:linux/unix下面的.o文件就是vs里面生成的obj文件,即编译器经过汇编处理后生成的目标文件,通常包括代码段(程序执行的指令)和数据段(全局变量和静态数据等)。

热点排行