-
Notifications
You must be signed in to change notification settings - Fork 0
/
hello-world.cpp
61 lines (53 loc) · 2.88 KB
/
hello-world.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
///=============================================================================
/// C++基础知识:
/// 1. 编译的四个过程 https://blog.csdn.net/qq_24654009/article/details/129170760#compilation-process
/// 1. 预处理
/// 2. 编译
/// 3. 汇编
/// 4. 链接
/// 2. 编译单元
///=============================================================================
/// 理解或思想:
/// 👉 C++的编译过程:将人类容易理解的高级语言(C++)翻译为机器理解的语言(机器码)
/// 👉 编译单元:即编译的基本单位;可以认为一个cpp文件即对应一个编译单元
///=============================================================================
/// 思想!:
/// 👉 对待C++:💡要像对待一门口语,写代码即写文章
/// 👉 编译:将一种语言转化为另一种语言;即💡翻译
/// 👉 编码原则:💡先说服自己,再说服机器
///=============================================================================
/// hello-world主要用于理解编译过程,我们可以分别生成如下目标:
/// 1. hello-world-ii
/// 2. hello-world-s
/// 3. hello-world-o
/// 4. hello-world
/// 他们通过如下指令生成:
/// 1. cc -E hello-world.cpp -o hello-world.cpp.ii
/// 2. cc -S hello-world.cpp.ii -o hello-world.cpp.s
/// 3. cc -c hello-world.cpp.s -o hello-world.cpp.o
/// 4. cc hello-world.cpp.o -o hello-world
/// 他们分别对应了编译的四个过程:
/// 1. 预处理;文本替换
/// 2. 编译(区别于整个编译过程);将源码转换为汇编代码
/// 3. 汇编;将汇编代码转换为机器码
/// 4. 链接;将机器码链接为可执行程序(或动态库),
/// 链接会组合若干机器码(如动态库)为一个可执行程序(或动态库)
/// 我们可以在hello-world目标后打开各个文件
/// hello-world.cpp.ii文件为预处理后的结果,
/// 可以看到,我们已经没有#include<iostream>指令了,
/// 取而代之的是<iostream>文件中的内容(我们可以通过按住ctrl点击文件名),以及一些标注`# ...`
/// hello-world.cpp.s文件为编译之后的结果,
/// 可以看到汇编代码,
/// 编译的四个过程中的"编译"就是将源代码转换为汇编代码的过程
/// 我们可以在代码中看到诸如"mov""call"等汇编指令
/// hello-world.cpp.o文件为汇编之后的结果,
/// 它们包括二进制的机器指令、静态数据等二进制的数据,计算机可以直接存入内存并执行或使用它们
/// hello-world为链接后的结果,
/// 因为我们只有一个编译单元,所以hello-world的内容和hello-world.cpp.o的内容基本相同
// 这段代码将被<iostream>文件的内容取代
#include <iostream>
// 这段代码将出现在hello-world.cpp.ii的最后
int main(int argc, char *argv[]) {
std::cout << "Hello, World!" << std::endl;
return 0;
}