Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73707
  • 博文数量: 21
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 241
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-07 14:05
文章分类

全部博文(21)

文章存档

2011年(1)

2008年(20)

我的朋友

分类:

2008-03-13 20:25:33

    标准C和C++将编译过程定义为9个阶段(Phases of Translation):
   
    1.字符映射(Character Mapping)
  
    文件中的物理源字符被映射到源字符集中,其中包括三字符运算符的替换、控制字符(行尾的回车换行)的替换。
    许多非美式键盘不支持基本源字符集中的一些字符,文件中可用三字符来代替这些基本源字符,以??为前导。
    但如果所用键盘是美式键盘,有些编译器可能不对三字符进行查找和替换,需要增加-trigraphs编译参数。
    在C++程序中,任何不在基本源字符集中的字符都被它的通用字符名替换。
 
    2.行合并(Line Splicing)
 
    以反斜杠\结束的行和它接下来的行合并。
   
    3.标记化(Tokenization)
 
    每一条注释被一个单独的空字符所替换。
    C++双字符运算符被识别为标记(为了开发可读性更强的程序,C++为非ASCII码开发者定义了一套双字符运算符集和新的保留字集)。
    源代码被分析成预处理标记。
 
    4.预处理(Preprocessing)
 
    调用预处理指令并扩展宏。
    使用#include指令包含的文件,重复步骤1到4。
 
    上述四个阶段统称为预处理阶段。
 
    5.字符集映射(Character-set Mapping)
 
    源字符集成员、转义序列被转换成等价的执行字符集成员。
    例如:'\a'在ASCII环境下会被转换成值为一个字节,值为7。
 
    6.字符串连接(String Concatenation)
 
    相邻的字符串被连接。
    例如:"""hahaha""huohuohuo"将成为"hahahahuohuohuo"。
 
    7.翻译(Translation)
 
  进行语法和语义分析编译,并翻译成目标代码。
 
    8.处理模板
 
  处理模板实例。
 
    9.连接(Linkage)
 
  解决外部引用的问题,准备好程序映像以便执行。
阅读(764) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~