c++是如何运行的
基本流程:
n个c++源文件-->传递给编译器
【预处理:将宏定义、条件编译等预处理指令换成相应代码;
编译[C阶段]:预处理后的代码转换为汇编代码编译为汇编代码;
汇编:将汇编代码转为目标文件Windows的.obj(符号表、重定位表等)
链接(静态和动态)[LNK阶段]:组合链接多个目标文件和库文件,包括符号解析、重定位】
-->变成对应的库或可执行程序
点击查看代码
//Test.h(头文件,确实只包含大括号)
}
//Test1.h
//头文件一般只声明(也可static/inline),不写函数体,方便链接,避免出现编译过程中每个源文件出现相同内容,链接无法识别
void Test(int,int);
....或....
static void Test(int a,int b){
std::cout<<"Hello World"<<std::endl;
}
....或....
//inine内联函数:获取实际函数体将函数调用的位置替换为函数体内容
//因为函数调用是有时间和空间开销的,内联可以避免函数内容过少,而浪费在函数调用的开销上
inline void Test(int a,int b){
std::cout<<"Hello World"<<std::endl;
}
//main.cpp
#include <iostream>//预处理语句(实际编译前执行):查找 名为iostream的【头文件】将其所有内容复制粘贴到此处
//iostream头文件包含预先设定好的被调用函数的声明:如std::cout、<< 、 ...;
#include "Test.h"
int Log(int a,int b);//int Log(int,int); 声明其他类的函数,无需加函数体
int main() {//main函数是程序的入口,运行程序时由此开始执行代码,不一定需要写返回值,默认返回0,仅适用于main函数
std::cout << "Hello World" << std::endl;
Log(1,2);
std::cin.get();
}//可替代为 [#include "Test.h"],可以证明#include是复制粘贴
//Log.cpp
#include <iostream>
int Log(int a,int b) {
int result = a * b;
Test(a,b);
return result;
}
//头文件只声明,链接此函数
void Test(int a,int b){
std::cout<<"Hello World"<<std::endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步