第九讲编译预处理.ppt
《第九讲编译预处理.ppt》由会员分享,可在线阅读,更多相关《第九讲编译预处理.ppt(29页珍藏版)》请在三一办公上搜索。
1、第九讲 编译预处理,所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。,主要内容,9.1 宏定义与符号常量9.2 文件包含9.3 条件编译,9.1 宏定义与符号常量,在语言中,“宏”分为无参数的宏(简称无参宏)和有参数的宏(简称有参宏)两种。9.1.1 无参宏定义9.1.2 符号常量9.1.3 有参宏定义,9.1.1 无参宏定义,1无参宏定义的一般格式#define 标识符 语言符号字符串其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”
2、可以是常数、表达式、格式串等。,2使用宏定义的优点(1)可提高源程序的可维护性(2)可提高源程序的可移植性(3)减少源程序中重复书写字符串的工作量,例1 宏替换的应用,#define M(y*y*y+2*y+1)/宏定义#include void main()int s,y=3;s=M*M+(y-2)*(M-1)+M;printf(“ns=%d”,s);,s=(y*y*y+2*y+1)*(y*y*y+2*y+1)+(y-2)*(y*y*y+2*y+1)1)+(y*y*y+2*y+1);结果为:1223,3说明(1)宏名一般用大写字母表示,以示与变量区别。(2)宏定义不是语句,所以不能在行尾加分
3、号。(3)在宏展开时,预处理程序仅以按宏定义简单替换宏名,而不作任何检查。如果有错误,只能由编译程序在编译宏展开后的源程序时发现。(4)宏定义命令#define出现在函数的外部,宏名的有效范围是:从定义命令之后,到本文件结束。通常,宏定义命令放在文件开头处。(5)在进行宏定义时,可以引用已定义的宏名。(6)对双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。,9.1.2 符号常量,在定义无参宏时,如果“语言符号字符串”是一个常量,则相应的“宏名”就是一个符号常量。恰当命名的符号常量,除具有宏定义的上述优点外,还能表达出它所代表常量的实际含义,从而增强程序的可读性。,符号常量示例,#
4、define EOF-1/*文件尾*/#define NULL 0/*空指针*/#define MIN 1/*极小值*/#define MAX 31/*极大值*/#define STEP 2/*步长*/,例2 输入圆的半径,求圆的周长、面积和球的体积。要求使用无参宏定义圆周率。,#define PI 3.1415926/*PI是宏名,3.1415926用来替换宏名的常数*/main()float radius,length,area,volume;printf(Input a radius:);scanf(%f,9.1.3 有参宏定义,1带参宏定义的一般格式:#define 宏名(形参表)语言
5、符号字符串2带参宏的调用和宏展开(1)调用格式:宏名(实参表)(2)宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中、相应形参字符串,非形参字符保持不变。,有参宏定义示例,例3:#define M(y)y*y*y+2*y+1/宏定义 a=M(10);/宏调用 即a=10*10*10+2*10+1;,有参宏定义实例,例4:利用带参数的宏实现简单函数的功能#define MIN(a,b)(ab)?a:b#include“stdio.h”main()int x,y,min;printf(“input two numbers:n”);scanf(“%d%d”,例5:宏定义与函数调用的区别#de
6、fine SQ2(y)(y)*(y)/宏定义 SQ1(int y)/函数定义 return(y)*(y);void main()int i=1,j=1;while(i=10)printf(“%dt”,SQ1(i+);while(j=10)printf(“%dt”,SQ2(j+);,3说明(1)定义有参宏时,宏名与左圆括号之间不能留有空格。否则,编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。(2)有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在所有形参外和整个字符串外,均加一对圆括号。,有参宏与有参函数的区别,调用有参函数时,是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 编译 预处理
链接地址:https://www.31ppt.com/p-5305572.html