C 语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际
参数。
对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
带参宏定义的一般形式为:
#define 宏名(形参列表) 字符串
在字符串中含有各个形参。
带参宏调用的一般形式为:
宏名(实参列表);
例如:
#define M(y) y* y+3* y //宏定义
// Code
k=M(5); //宏调用
在宏调用时,用实参 5 去代替形参 y,经预处理宏展开后的语句为 k=5* 5+3* 5。
【示例】输出两个数中较大的数。
1. #include <stdio.h>
2. #define MAX(a,b) (a>b) ? a : b
3. int main(){
4. int x , y, max;
5. printf("input two numbers: ");
6. scanf("%d %d", &x, &y);
7. max = MAX(x, y);
8. printf("max=%d\n", max);
9. return 0;
10.}
运行结果:
input two numbers: 10 20
max=20
程序第 2 行进行了带参宏定义,用宏名 MAX 表示条件表达式(a>b) ? a : b,形参 a、
b 均出现在条件表达式中。程序第 7 行 max=MAX(x, y)为宏调用,实参 x、y,将代换形
参 a、b。宏展开后该语句