第二章:基本概念
- [2.1 环境](#2.1 环境)
- [2.2 词法规则](#2.2 词法规则)
- [2.3 程序风格](#2.3 程序风格)
- 总结
2.1 环境
ANSI C(C语言的标准)在任何一种实现中,有两种不同的环境:翻译环境 和执行环境 。
翻译环境:源代码被转换成可执行的机器指令。
执行环境:用于实际执行代码。
这两种环境不必在同一台机器上,eg.交叉编译环境
2.1.1 翻译
翻译过程具体描述为,将一个或多个源文件经过 编译器(Compiler) 编译生成目标代码·obj或.o
,产生的一个或多个目标代码通过 链接器(Linker) 链接捆绑,形成一个单一而完整的可执行程序.exe
。对于libraries是指在链接的同时引入标准C函数库或个人程序库中任何被该程序所用到的函数。
编译过程也由几个阶段组成,主要由预处理器(preprocessor)处理 和 解析(parse) 两个阶段组成。预处理器处理:在源代码上执行文本操作,eg.实际值代替由#define
指令定义的符号和#include
指令包含的文件内容。解析:判断语句的意思,绝大多数错误和警告产生的地方。
一、文件名约定
源代码:xxx.c
头文件:xxx.h
目标文件:UNIX系统中xxx.o
,MS-DOS系统中xxx.obj
二、编译和链接
编译和链接C程序的特定命令在不同的系统中各不相同,以UNIX系统举例子,C编译器被称为cc
-
编译+链接
.c
文件powershellcc main.c #编译+链接一个.c cc main.c test01.c test02.c #编译+链接多个.c
-
编译
.c
+链接现存.o
文件powershellcc main.o test01.o test02.c
为什么说是现存的
.o
文件呢?这里解释一下,在执行完cc main.c
后,会产生一个称为a.out
的可执行文件,而这中间会产生program.o
的目标文件,目标文件在链接完毕后会自动删除。但是在执行完cc main.c test01.c test02.c
(编译多个时),目标文件不会被删除,这就允许对程序进行修改后,只对改动过的源文件进行重新编译。 -
只编译
-
只链接