8.1 预处理-高二《新概念C语言能力教程》同步教学课件 (电工版2020)
2023-06-12
|
28页
|
81人阅读
|
0人下载
精品
内容正文:
第8章预处理
第8章预处理
01程序编译
02宏定义
03文件包含及条件编译
程序编译
这节课我们讨论程序的编译。
3
8.1 程序编译
把一个C语言程序编译成可执行目标文件的过程可简单地分成两个阶段:编译汇编阶段和链接阶段。
一个C语言程序常包含多个源文件,VC6.0用工程(Project)把多个相关的源文件组织在一起。
把一个C语言程序编译成可执行目标文件的过程可简单地分成两个阶段:编译汇编阶段和链接阶段。
一个C语言程序常包含多个源文件,VC6.0用工程(Project)把多个相关的源文件组织在一起。
4
编译汇编阶段
编译汇编阶段的任务是把源文件翻译成由相应的机器指令组成的目标文件。属于工程的每个源文件都会编译汇编成一个单独的目标文件。
编译汇编时可以检查出源文件中的语法错误。
编译汇编对应的命令是Build(组建)菜单中的Compile(编译)命令。
编译汇编阶段的任务是把源文件翻译成由相应的机器指令组成的目标文件。
属于工程的每个源文件都会编译汇编成一个单独的目标文件。
编译汇编时可以检查出源文件中的语法错误。
编译汇编对应的命令是Build(组建)菜单中的Compile(编译)命令。
5
编译汇编源文件
团队开发时,源文件中可能只有一个实现特定功能的函数,也可借助编译汇编检查语法错误。
团队开发时,源文件中可能只有一个实现特定功能的函数,也可借助编译汇编检查语法错误。
如图所示文件中只有一个isPrime函数,但依然可以借助编译汇编检查语法错误。
6
编译汇编源文件
程序中有main函数,没有调用函数isPrime函数的定义,编译汇编这个源文件会出现语法错误。
找不标识符isPrime。
只需加一个函数声明语句,扩展一下函数的作用域即可,没有函数定义,编译汇编也不报错了。
这样就可以检查代码中其它的语法错误了。
7
链接阶段
链接阶段把编译汇编阶段产生的属于同一个工程的所有目标文件合并成一个可执行文件。
链接阶段的主要任务是处理与全局作用域的标识符相关的问题。当两个源文件中定义了相同的全局作用域标识符或一个源文件中引用了其它源文件中并没有定义的全局作用域标识符时,链接阶段就会出错。
链接对应的命令是菜单Build(组建)中的Build(组建)命令。
链接阶段把编译汇编阶段产生的属于同一个工程的所有目标文件合并成一个可执行文件。
链接阶段的主要任务是处理与全局作用域的标识符相关的问题。当两个源文件中定义了相同的全局作用域标识符或
一个源文件中引用了其它源文件中并没有定义的全局作用域标识符时,
链接阶段就会出错。
链接对应的命令是菜单Build(组建)中的Build(组建)命令。
尽管没有编译错误,但若选择组建命令,就会出现找不到isPrime函数定义的错误。
函数声明只能使编译汇编阶段不出错,没有函数定义链接阶段会报错。
8
源文件
源文件中除了C语言语句还常包含预处理命令。预处理命令常以#开头,如#include <stdio.h>。
预处理命令不是C语言语句,不以分号结束。
编译时,预处理命令被称为“预处理器”的程序处理。经过预处理后的源文件通常就只有C语言语句了。
编译过程又可细分为预处理阶段、编译汇编阶段和链接阶段。
常用的预处理命令有:宏定义、文件包含和条件编译。
源文件中除了C语言语句还常包含预处理命令。预处理命令常以#开头,如#include <stdio.h>。
预处理命令不是C语言语句,不以分号结束。
编译时,预处理命令被称为“预处理器”的程序处理。经过预处理后的源文件通常就只有C语言语句了。
编译过程又可细分为预处理阶段、编译汇编阶段和链接阶段。
常用的预处理命令有:宏定义、文件包含和条件编译。
9
宏定义
这节课我们讨论宏定义。
10
8.2 宏定义
define命令可用于定义宏,一般形式为:
#define 标识符 值
其中,标识符称为宏名,值称为宏体。
定义了宏后,源文件中的宏体就可以用宏名代替了。预处理时会把以标识符形式出现的宏名替换成宏体,这个过程称为“宏展开”。
宏展开只是一种机械性的操作,类似于文本编辑中的查找替换。
例8-1 简单宏。
define命令可用于定义宏,一般形式为:
#define 标识符 值
其中,标识符称为宏名,值称为宏体。
定义了宏后,源文件中的宏体就可以用宏名代替了。预处理时会把以标识符形式出现的宏名替换成宏体,这个过程称为“宏展开”。
宏展开只是一种机械性的操作,类似于文本编辑中的查找替换。
程序中定义一个宏N,值为7,N有时也称为符号常量。
字符串中的N只有普通字符没有被替换。
11
宏名的作用域
undef 命令可以取消一个宏定义,一般形式为:#undef 宏名
宏名是标识符也有作用域,在作用域内的宏名才会被宏体替换。
一个宏名的作用域开始于定义处
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。