在了解C++函数重载前,如果对文件的编译与链接不太了解。可以看看我之前的一篇文章,链接: 文件的编译链接
想要清楚为什么C语言不支持函数重载而C++支持,有俩个过程:1.编译链接。2.函数名修饰过程。
编译链接过程
C++编译器与C编译器基本相似,当一个程序运行起来需要经历四个阶段:预处理、编译、汇编、链接。
假设文件中有一个头文件project.h、俩个源文件project.cpp和test.cpp
-
在预处理阶段进行:头文件展开、宏定义、条件编译、去掉注释……
project.h文件与project.cpp文件生成project.i文件
project.h文件与test.cpp文件生成test.i文件 -
在编译阶段:检查语法、生成汇编代码
project.i文件转换为project.s文件
test.i文件转换为test.s文件 -
在汇编阶段:汇编代码转换为二进制的机器代码
project.s文件转换为project.o文件
test.s文件转换为test.o文件 -
在链接阶段:生成可执行程序
在windows环境下project.s与test.s文件会生成一个xxx.exe可执行程序。
在Linux环境下project.s与test.s文件默认会生成一个a.o