程序员的自我修养 读书笔记03

  • Build = Compile +Link
  • 四个步骤:Prepressing Compilation Assembly Linking
  • 预处理 .c .cpp .h .hpp文件被预编译后,产生.ii文件
  • 预编译主要处理以#开头的预编译指令:
    1.删除所有的#define,展开宏的定义。
    2.处理条件预编译指令 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif结束一个#if……#else条件编译块 #error停止编译并显示错误信息
    3.#号必须是该行除了任何空白字符外的第一个字符
    4.#include 将包含的文件插入到预编译指令的位置。被包含的文件内还可以包含其他的文件。
    5.删除所有的注释 和空格。
    6.添加行号和文件名标识,方便编译时调试的行号信息和错误和警告的行号信息。
    7.保留#pragma 编译器指令
  • 编译:把与处理完的文件生成相应的汇编代码。几乎所有的高级语言都会生成汇编代码。
  • 汇编:将汇编代码转位机器指令(并非可执行文件)。每一条汇编语句几乎都对应一条机器指令。照表翻译。输出目标文件(Object File)
  • 链接
  • 编译过程:
    1.扫描
    2.语法分析
    3.语义分析
    4.源代码优化
    5.代码生成
    6.目标代码优化
  • 源代码被输入到扫描器中,其运用一种类似于有限状态机的算法,将源代码的字符序列分割成一系列的记号(Token),有这几类:关键字、标识符、字面量(数字,字符串。一般认为不可更改)、特殊符号(+ - *等)。
  • 语法分期:产生语法(Syntax)树,采用上下文无关语法。
  • 语义分析:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值