内容正文:
第九章 程序设计优化--预处理
1
CONTENTS
目录
01
02
带参数的宏定义
预处理命令
03
文件包含
04
条件编译
C语言
知识树
My First Template
2、带参数的宏定义
C语言程序设计
4
C语言程序设计 带参数的宏定义
C语言
预处理的概念
预处理命令
不带参数的宏定义
My First Template
C语言
本次任务
使用带参数的宏定义比较
两个值的大小,输出大值
C语言程序设计—带参数的宏定义
My First Template
CONTENTS
内容
带参数的宏定义
01
任务实现
02
带参数的宏与函数的区别
03
7
带参数的宏定义
01
C语言程序设计 带参数的宏定义
C语言
带参宏定义的一般形式
#define 宏名(形参表) 字符串
说明
宏定义中的参数称为形式参数,
宏调用中的参数称为实际参数。
例:#define PI 3.1415926
带参宏调用的一般形式
宏名(实参表)
C语言程序设计 带参数的宏定义
C语言
/*宏定义*/
#define S(a,b) a*b
……
/*宏调用*/
area = S(3,2)
……
带参宏定义的置换过程
第一步:字符串替换
编译预处理时,程序按照#define命令行中指定的字符串 从左到右进行置换:area=a*b
第二步:参数代换
如果串中包含宏中的形参(如a,b)则将程序语句中的相应的实参代替形参:
得3*2
C语言程序设计 带参数的宏定义
C语言
#include <stdio.h>
#define PI 3.1415926
#define S(r) PI*r*r
void main()
{float a,area;
a=3.6;
area=S(a);
printf(“r=%f
area=%f
”,a,area) ;
}
例:使用带参的宏求圆的面积
赋值语句area=S(a);经宏展开后为: area=3.1415926*a*a;
带入参数a=3.6得:area=3.1415926*3.6*3.6
任务实现
02
C语言
本次任务
使用带参数的宏定义比较
两个值的大小,输出大值
C语言程序设计—带参数的宏定义
My First Template
C语言程序设计 带参数的宏定义
C语言
任务实现——函数
不带参数的宏定义、带参数的宏定义
#include <stdio.h>
int max(int x,int y)
{return(x>y)?x:y;}
void main( )
{
int a,b,t;
printf("请输入两个整数,中间用逗号隔开
");
scanf("%d,%d",&a,&b);
t=max(a,b);
printf("最大值为:%d
",t);
}
My First Template
C语言程序设计 带参数的宏定义
C语言
不带参数的宏定义、带参数的宏定义
#include "stdio.h"
#define PR printf
#define MAX(x,y) (x>y)?x:y
void main()
{
int a,b;
printf("请输入两个整数,中间用逗号隔开
");
scanf("%d,%d",&a,&b);
PR("最大值为:%d
",MAX(a,b));
}
预处理
变量定义
变量赋值
宏代换输出结果
任务实现——带参数的宏定义
说明:宏名与形参的左括号间不能有空格,否则将会把宏名后所有数据都当做字符串的一部分。
#define MAX (x,y) (x>y)?x:y
误认为:无参宏定义,宏名MAX代表字符串(x,y) (x>y)?x:y
PR printf
MAX(a,b) (x>y)?x:y
输出结果:
My First Template
带参数的宏与函数的区别
03
C语言程序设计 带参数的宏定义
C语言
带参的宏和函数的区别
1、宏替换不占运行时间,只占编译时间,而函数调用则占用运行时间。
2、函数调用发生在程序运行时,需要分配临时的内存单元,宏替换是在编译时进
行的,不分配内存单元,不进行值的传递处理,也没有返回值的概念。
3、使用宏次数多时,宏展开后源程序变长。而函数调用不会使源程序变长。
4、函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只
是进行简单的字符替换。
C语言程序设计 带参数的宏定义
C语言
5、函数中的实参与形参均需定义类型,且类型必须一致;宏定义不存在此问题,
宏名无类型,其参数也无类型,宏定义时字符串可以是任何类型的数据。
函数:
int max(int x,int y)
{return(x>y)?x:y;}
void main( )
{
int a,b;
……}
带参数的宏定义:
#define MAX(x,y) (x>y)?x:y
void main()
{
int a,b;
……
PR("最大值为:%d
",MAX(a,b));
}
总结
1. 带参数的宏定义
3. 带参数的宏与函数的区别
2. 任务实现
$$