《程序员的自我修养》这本书其实最开始是信息安全这门课推荐的书,当时书买了,也看了点,后来就感觉跟没看是一样的,主要是之前根本就没怎么接触,也没写什么读书笔记或者做一些实验来加深对知识的理解,后来上了《程序设计与计算机系统》和《计算机病毒》这两门课,然后再次读了一下,收获颇丰!
这本书的全名叫做《程序员的自我修养---链接,装载与库》,但是不得不提的是编译这个过程也非常重要,书的第二章从一个简单的输出hello,world程序说起
当在linux下面执行gcc hello.c或者在windows下面cl /c hello.c,这个过程实际上可以分为一下4个步骤:
预编译:
预编译过程主要处理源代码文件中以#开始的预编译指令,比如”#include”, ”#define”,处理规则如下:
- 删除所有的#define,展开所有的宏定义
- 删除所有注释,增加行号和文件名标识用于编译器调试
- 保留所有的#pragma编译器指令,因为编译器要使用它们
- 处理所有的条件预编译指令,比如#if,#ifdef等
编译
编译过程主要是对预处理完的文件进行一系列的词法分析、语法分析、语义分析、代码生成、代码优化最终得到汇编代码。
词法分析:主要是扫描源程序将源代码的字符序列分割成一系列的Token,Token主要分为关键字,标识符,数字&