《程序员的自我修养》阅读笔记(三)

  距离上次看这本书已经俩月了哈哈,好在本来看的就不多,还记得之前的内容。暑假做完项目再来看,居然发现很多当时要靠搜索的知识这里面都有讲,要是早点看到就好了-_-||

这次是语言编译和链接的过程:

首先,对于通过gcc编译一段程序在实际上可以分为四个步骤,预处理编译汇编链接。当我们使用命令: $gcc hello.cpp时,其实就是执行了这四个步骤,并且它们是可以使用命令单独进行的。 

预编译

在这个阶段,.cpp和.hpp会被转为.ii文件(对于.c和.h来说是转为.i文件)。

$ gcc -E hello.c -o hello.i

使用 -E 参数可以使gcc只进行预编译。

在预编译中,所有以"#"开头的代码都会被处理,比如:

1.将所有#define的宏定义展开到具体位置,然后把这些定义删除。

2.将所有#include的内容写入到该位置,然后把这些指令删除。

3.删掉所有注释"//","/* */"。

4.添加行号等。

编译

在这个阶段,经过预处理的.i文件会经过词法分析,语法分析,语义分析然后产生相应的汇编文件

$ gcc -S hello.i -o hello.s

使用 -S 参数可以使gcc只进行编译。

在这个阶段会用到词法分析器(lexer)语法分析器(Grammar parser)和语义分析器(Semantic Analyzer),它们在汇编阶段发挥了非常重要的作用。可以到wiki看具体工作原理:https://zh.wikipedia.org/wiki/%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90

链接

在这个阶段,会将一大堆文件链接起来,最终得到一个.out文件,也就是可执行文件。至于为什么要有一大堆文件,还得等我明天看完了,再回来补充(笑)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值