设为首页 加入收藏

TOP

二级C语言考试辅导教程第九章:预处理[2]
2014-11-23 21:52:17 】 浏览:286
Tags:二级 语言 考试辅导 教程 处理

8. 对“输出格式”作宏定义,可以减少书写麻烦。例9.3 中就采用了这种方法。
#define P printf
#define D "%d\n"
#define F "%f\n"
main(){
int a=5, c=8, e=11;
float b=3.8, d=9.7, f=21.08;
P(D F,a,b);
P(D F,c,d);
P(D F,e,f);
}


带参宏定义


C语言允许宏带有参数。在宏定义中的参数称为形式参数, 在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开, 而且要用实参去代换形参。 来源:www.examda.com


带参宏定义的一般形式为: #define 宏名(形参表) 字符串 在字符串中含有各个形参。带参宏调用的一般形式为: 宏名(实参表);
例如:
#define M(y) y*y+3*y /*宏定义*/
:
k=M(5); /*宏调用*/
: 在宏调用时,用实参5去代替形参y, 经预处理宏展开后的语句
为: k=5*5+3*5
#define MAX(a,b) (a>b) a:b
main(){
int x,y,max;
printf("input two numbers: ");
scanf("%d%d",&x,&y);
max=MAX(x,y);
printf("max=%d\n",max);
}
上例程序的第一行进行带参宏定义,用宏名MAX表示条件表达式(a>b) a:b,形参a,b均出现在条件表达式中。程序第七行max=MAX(x,
y)为宏调用,实参x,y,将代换形参a,b。宏展开后该语句为: max=(x>y) x:y;用于计算x,y中的大数。对于带参的宏定义有以下问题需要说明:


1. 带参宏定义中,宏名和形参表之间不能有空格出现。
例如把: #define MAX(a,b) (a>b) a:b写为: #define MAX (a,b) (a>b) a:b 将被认为是无参宏定义,宏名MAX代表字符串 (a,b)(a>b) a:b。
宏展开时,宏调用语句: max=MAX(x,y);将变为: max=(a,b)(a>b) a:b(x,y);这显然是错误的。


2. 在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。


3. 在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。
#define SQ(y) (y)*(y)
main(){
int a,sq;
printf("input a number: ");
scanf("%d",&a);
sq=SQ(a+1);
printf("sq=%d\n",sq);
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二级C语言考试辅导教程第八章:枚.. 下一篇二级C语言考试辅导教程第九章:预..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目