C++ 编译过程

单个文件当前可以直接编译,但我要演示多个文件的编译过程。

编译过程 详细说明在main.cpp最后。

在.h中只定义函数内容。在.h文件中写防止重复包含#ifndef 。

在.cpp中定义函数实现。在.cpp文件中导入.h文件。

f0.h 内容

cpp 复制代码
#ifndef F0_H  // #ifndef的意义:防止头文件被重复包含和编译  相当于if判断 检测该宏是否定义
#define F0_H  // #define 开始宏定义
// 代码内容

#include <iostream>
using namespace std;

// 类声明
class MyClass1 {
//类的权限默认是私有的
//private: 类权限设置为 内部访问
public: // 类权限设置为 公有
    void fun1();
};

// 函数声明
void fun2();

#endif // 结束条件编译

f1.cpp 内容

cpp 复制代码
#include <iostream>
#include "f0.h"

 void MyClass1::fun1(){
        std::cout << "acc fun1 触发了" << std::endl;
    };

f2.cpp 内容

cpp 复制代码
#include <iostream>
#include "f0.h"

void fun2(){
    std::cout << "fun2 触发了" << std::endl;
}

main.cpp 内容

cpp 复制代码
#include "f0.h"

int main() {
    // 调用其他文件中的功能
    MyClass1 obj;
    obj.fun1();
    fun2();
    std::cout << "main 结束" << std::endl;
    return 0;
}


/*
原理实践 分步编译:

-E  仅进行预处理;不进行编译、汇编或链接。
-S  仅进行编译;不进行汇编或链接。
-c  进行编译和汇编,但不进行链接。
-o <文件名>  将输出内容存入 <文件名> 中。

1、预处理
C++ 中预处理指令以 # 开头。
在预处理阶段,会对 #define 进行宏展开,处理 #if,#else 等条件编译指令,递归处理 #include。
这一步需要我们添加所有头文件的引用路径。

g++ -E main.cpp -o main.i
g++ -E f1.cpp -o f1.i
g++ -E f2.cpp -o f2.i

2、编译汇编
检查代码的规范性和语法错误等,检查完毕后把代码翻译成汇编语言文件。
g++ -S main.i -o main.s
g++ -S f1.i -o f1.s
g++ -S f2.i -o f2.s

3、二进制
基于汇编语言文件生成二进制格式的目标文件。
g++ -c main.s -o main.o
g++ -c f1.s -o f1.o
g++ -c f2.s -o f2.o

4、链接
将目标代码与所依赖的库文件进行关联或者组装,合成一个可执行文件
g++ main.o f1.o f2.o -o main


一步到位
g++ main.cpp f1.cpp f2.cpp -o main
*/

运行

bash 复制代码
g++ main.cpp f1.cpp f2.cpp -o main
相关推荐
枫叶丹42 分钟前
【HarmonyOS 6.0】ArkData 应用间配置共享:构建跨应用协作新范式
开发语言·华为·harmonyos
寻寻觅觅☆6 分钟前
东华OJ-基础题-59-倒数数列(C++)
开发语言·c++·算法
我不是懒洋洋7 分钟前
【数据结构】顺序表专题(详细代码及配图)
c语言·开发语言·数据结构·算法·青少年编程·visual studio
Trouvaille ~10 分钟前
【优选算法篇】BFS 解决最短路——寻找最优路径的真谛
c++·算法·leetcode·面试·蓝桥杯·宽度优先·最短路问题
listhi52013 分钟前
基于在线优化的快速模型预测控制(Fast Online MPC)MATLAB实现
开发语言·matlab
CoderCodingNo22 分钟前
【CSP】CSP-J 2025真题 | 多边形 luogu-P14360 (相当于GESP六级水平)
开发语言·c++·算法
一直都在57229 分钟前
AQS详解
java·开发语言
zero159730 分钟前
Python 8天极速入门笔记(大模型工程师专用):第二篇-Python基础入门(变量、数据类型、print输出)
开发语言·笔记·python
Magic--30 分钟前
【LeetCode 27. 移除元素】C++ 范围 for 极简实现与原理解析
c++·算法·leetcode
koping_wu32 分钟前
【Java并发】CompletableFuture详解:常用API和底层原理
java·开发语言·python