C++ 编译三环节

预处理

处理预处理指令。移除注释,展开宏,展开头文件。

cpp 复制代码
#pragma once

#include <cstdio>
#ifdef OS_LINUX
#endif // OS_LINUX


/* comment */

生成没有预处理指令的 C++ 文件。

汇编

将预处理后的文件作为输入,进行词法解析、语法解析、语义解析。将 C++ 源代码转化成汇编代码。

调用汇编工具将汇编代码转化为可以被计算机直接执行的二进制文件。汇编器将每个源文件编译成一个目标文件,将目标文件组合成一个可执行文件。

目标文件可以引用未定义的符号。

链接

链接器会根据编译器生成的目标文件生成最终的编译输出。将对未定义符号的引用替换为正确的地址来链接所有目标文件。

在此阶段,最常见的错误是缺少定义或重复定义。

相关推荐
一个不知名程序员www3 小时前
算法学习入门 --- 哈希表和unordered_map、unordered_set(C++)
c++·算法
C++ 老炮儿的技术栈4 小时前
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
c语言·c++·windows·git·vscode·visual studio
%xiao Q4 小时前
GESP C++五级-202406
android·开发语言·c++
Sarvartha4 小时前
C++ STL 栈的便捷使用
c++·算法
Aevget5 小时前
MFC扩展库BCGControlBar Pro v37.2 - 全新的VS 2026可视化管理器
c++·mfc·bcg·界面控件·ui开发
C+-C资深大佬5 小时前
C++类型判断
开发语言·c++
Yu_Lijing5 小时前
基于C++的《Head First设计模式》笔记——模式合作
c++·笔记·设计模式
zmzb01035 小时前
C++课后习题训练记录Day74
开发语言·c++
cdut_suye6 小时前
解锁函数的魔力:Python 中的多值传递、灵活参数与无名之美
java·数据库·c++·人工智能·python·机器学习·热榜
txinyu的博客7 小时前
前置声明与 extern
linux·c++