第13章 预处理-【千锋教育】C语言程序设计(微课)
2023-03-21
|
31页
|
114人阅读
|
0人下载
教辅
内容正文:
第13章 预处理
带参宏
不带参宏
文件包含
条件编译
C语言程序设计
宏定义
文件包含
条件编译
目 录
CATALOUGUE
初心至善 匠心育人
01
02
03
掌握带参宏
掌握条件编译
掌握不带参宏
熟悉文件包含
学 习 目 标
LEARNING OBJECTIVES
初心至善 匠心育人
13.1
宏定义
13.1.1
#define与#undef
13.1.2
不带参数的宏定义
13.1.3
带参数的宏定义
13.1.4
带参宏的注意事项
13.1.5
带参宏与函数的区别
13.1.6
宏的嵌套定义
初心至善 匠心育人
13.1.4
带参宏的注意事项
13.1.5
带参宏与函数的区别
13.1.6
宏的嵌套定义
初心至善 匠心育人
宏定义是最常用的预处理功能之一,对于预处理器而言,它在遇到宏定义之后,会将随后在源代码中出现的宏名进行简单的替换操作。
13.1 宏定义
初心至善 匠心育人
宏定义指令以#define开头,后面跟随宏名和宏体,其语法格式如下:
为了和其他变量以及关键字进行区分,宏定义中的宏名一般由全大写英文字母以及下划线组成。注意末尾没有分号,因为这是指令而非语句,具体示例如下:
在这个宏定义中定义了一个标识符PI,它所代表的值是3.14。预编译时在随后的源代码中凡是出现了PI的地方都会被替换为3.14,这个过程称为宏展开。
除了#define之外相应地还有#undef指令。#undef指令用于取消宏定义。在#define定义了一个宏之后,如果预处理器在接下来的源代码中遇到了#undef指令,那么从#undef之后这个宏就都不存在了。
13.1 宏定义
13.1.1 #define与#undef
初心至善 匠心育人
宏定义分为不带参数的宏定义和带参数的宏定义,在13.1.1小节中,使用#define指令完成了简单的字符替换工作就属于不带参数的宏定义,两者的区别在于是否有参数列表,本节将介绍不带参数的宏定义的其它用法,接下来通过一个案例来演示如何使用宏定义替换表达式及字符串,具体如代码示例。
定义了一个宏STRING,用来输出字符串“Hello world!”。
调用printf函数输出1+2的值。
13.1 宏定义
13.1.2 不带参数的宏定义
初心至善 匠心育人
除了无参数的宏定义之外,有的时候在程序中更希望能够使用带参数的宏定义,这样在完成替换过程的时候会有更多的灵活性,其语法格式如下:
13.1 宏定义
13.1.3 带参数的宏定义
第3行:定义了一个带参数的宏定义#define CIR(x) 2*PI*x
初心至善 匠心育人
带参宏的参数不同于函数中的参数,带参宏的参数只是简单的替换,因此将一个表达式传递给带参宏,如果不加括号的话,很有可能会出问题,接下来通过一个案例来演示这种情况,具体如代码示例。
为了让8+2先执行,需要将8+2用小括号括起来,再传递给形参a,如S(8+2),或者将宏体中的a用小括号括起来,如“#define S(a) (a)*(a)”,这样带参宏S展开后方为(8+2)*(8+2),编译时求出结果为100。
13.1 宏定义
13.1.4 带参宏的注意事项
初心至善 匠心育人
带参宏与函数共有8点不同之处,具体如下。
(1) 宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
(2)宏进行定义时不会考虑参数的类型。
(3)参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
(4)参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
(5)参数宏在定义时需留心,多加括号。
(6)函数只在目标文件中存在一处,比较节省程序空间。
(7)函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
13.1 宏定义
13.1.5 带参宏与函数的区别
初心至善 匠心育人
前面讲解了不带参宏和带参宏,关于宏的使用,还可以将一个宏嵌套在另一个宏的定义中,接下来通过一个案例来演示宏的嵌套定义。
13.1 宏定义
13.1.6 宏的嵌套定义
第2行:定义宏R,代表圆的半径为10。
第3行:定义宏PI,代表圆周率3.1415926。
第4行:定义宏S,代表圆的面积,面积公式为圆周率乘以半径的平方。
初心至善 匠心育人
13.2
文件包含
13.2.1
源文件与头文件
13.2.2
引入头文件
初心至善 匠心育人
文件包含是指一个文件可以将另外一个文件的全部内容包含进来,C语言中通过#include指令来实现文件包含。在预处理过程中出现#include引入文件的地方,被包含的文件的内容会被直接插入到文件中文件包含指令相对应的位置,然后再对合并后的文件进行编译。使用文件包含指令,可以减少重复性的劳动,
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。