C语言-第15课 - 编译过程简介

第15课  - 编译过程简介

1. 编译器做了什么

(1)预编译:

l 处理所有的注释,以空格代替。

l 将所有的#define删除,并且展开所有的宏定义。

l 处理条件编译指令#if,#ifdef,#elif,#else,#endif。

l 处理#include,展开被包含的文件。

l 保留编译器需要使用的#pragma指令。

预处理指令:gcc -E file.c -o hello.i

(2)编译

l 对预处理的文件进行一系列的词法分析,语法分析和语义分析:

词法分析主要分析关键字,标示符,立即数等是否合法。

语法分析主要分析表达式是否遵循语法规则。

语义分析在语法分析而定基础上进一步分析表达是否合法。

l 分析结束后进行代码优化生成相应的汇编代码文件。

编译指令:gcc -S file.c -o hello.s

(3)汇编

汇编器将汇编代码转变为机器可以执行的指令。每个汇编语句几乎都对应一条机器指令。

汇编指令:gcc -c file.s -o hello.o

// test.h

/*

This is the header file for test.c

*/

#define MAX(a,b) (((a)>(b)) ? (a) : (b))

int g_global = 10;

// test.c

#include "test.h"

#define LOW  0

#define HIGH 255

int max(int a, int b)

{

return MAX(a,b);

}

int main()

{

int c = max(LOW, HIGH); // Call max to get the larger number

return 0;

}

  1. 连接器的意义

连接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。

  1. 模块拼装

静态链接

动态链接

小结:

(1) 编译器将编译工作主要分为预处理,编译和汇编三步。

(2) 连接器的工作是把各个独立的模块链接成为可以执行的程序。

(3) 静态链接在编译器完成,动态链接在运行期完成。

原文地址:https://www.cnblogs.com/free-1122/p/9706901.html

时间: 2024-10-30 14:57:31

C语言-第15课 - 编译过程简介的相关文章

第19课 编译过程简介

1. 初始编译器            广义的编译器                                                                                        你可能不知道的事… 2. 预编译:指令示例——gcc –E file.c –o file.i (1)处理所有的注释,以空格代替 (2)将所有的#define删除,并且展开所有的宏定义 (3)处理条件编译指令#if.#ifdef.#elif.#else.#endif (4)

c++编译过程简介

了解编译过程的益处 c++工程相关的问题 什么是库?静态库和动态库又有什么区别? 头文件起什么作用? 编译过程简介 名词: 编译:把源文件中的源代码翻译成机器语言,保存到目标文件中.如果编译通过,就会把CPP转换成OBJ文件. 编译单元: 每个cpp就是一个编译单元,每个编译单元相互之间是独立且相互不知的.一个编译单元(Translation Unit)是指一个.cpp文件以及这所include的所有.h文件,.h文件里面的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一

SSCLI编译过程简介

前文演示了编译SSCLI最简便的方法(在Windows下): 在“Visual Studio 2005 Command Prompt”下,进入SSCLI的根目录: 运行 env.bat 脚本准备环境: 运行 buildall.cmd 脚本开始编译过程. env.bat设置了当前SSCLI的运行环境,命令的语法是:`env [option]`,其中[option]可以是debug.checked和free,各个环境选项说明如下表: 选项 说明 debug 关闭代码优化设置,启用调试用代码(一般是通

C语言编译过程简介

刚开始接触编程的时候,只知道照书敲敲代码,一直都不知道为什么在windows平台下代码经过鼠标那样点击几下,程序的结果就会在那个黑色的屏幕上.现在找了个机会将C语言的编译原理做一下小小的总结,这样也能为以后我们进军linux编程做一些准备工作,现在这里和大家一起分享分享.O(∩_∩)O~ 讲到编译原理,我觉得首先我们得明白一些基本概念. 编辑器:我们编写代码的一些窗口,如:记事本.word.notepad 等. 编译器:检查用户代码的一些语法错误并且将其编译成汇编代码. 汇编器:将编译出来的文件

第20课 链接过程简介

1. 链接器的意义 (1)每个C语言源文件被编译后生成目标文件,这些目标文件最终要被链接在一起生成可执行文件. (2)链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接. 2. 静态链接 (1)由链接器在链接时将库的内容直接加入到可执行程序中 (2)Linux下静态链的创建和使用 ①编译静态库源码:gcc –c  lib.c –o lib.o ②生成静态库文件:ar –q lib.a lib.o //将lib.o与其他文件打包到lib.a中 ③使用静态库编译:g

用gcc编译c语言程序以及其编译过程

对于初学c语言编程的我们来说,学会如何使用gcc编译器工具,对理解c语言的执行过程,加深对c语言的理解很重要!!! 1.预编译 --> 2.编译 --> 3.汇编 --> 4.链接----------------------------------------------------------------------------- 0.编写c代码,并输入以下如图代码,生成c文件hello.c. ----------------------------------------------

gcc 学习笔记(一) - 编译C程序 及 编译过程

一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (assembly) 得到机器码, 连接 (linking) 得到可执行文件; -- 查看每个步骤的编译细节 : "-E" 对应 预处理, "-S" 对应 编译, "-c" 对应 汇编, "-O" 对应 连接; -- 每个步骤对应的工

编译过程

编译过程简介: 预编译:gcc -E file.c -o file.i 处理注释,以空格代替 将宏定义展开 处理条件编译指令 处理#include,展开被包含的文件 保留编译器需要使用的#pragma指令 编译: gcc -S file.i -o file.s 对预处理文件进行词法分析,语法 分析,语义分析 汇编:gcc -c file.s -o hello.o 将汇编代码翻译成机器码 链接: 将各个模块之间的相互引用的部分处理好,使得各个模块之间能够正确的衔接.将各个独立的模块链接成可执行的程

C语言的编译过程、安装gcc编译器以及设置环境变量

以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1.头文件可以不需要编译 2.可以查看具体的声明 3.头文件加上实现文件的o文件提交给使用者即可 ,不需要知道源代码 4..o文件预先编译,所以整个项目编译时,会大大提高编译的时间 . 5.当一个文件(A.c文件)依赖于头文件(b.h)时 ,如果b.c编译之后形成的b.o文件重新编译后,a.o的文件不需