C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。
对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。
带参宏定义的一般形式为:
#define 宏名(形参列表) 字符串
在字符串中可以含有各个形参。
带参宏调用的一般形式为:
例如:
#define M(y) y*y+3*y //宏定义 // TODO: k=M(5); //宏调用
在宏展开时,用实参 5 去代替形参 y,经预处理程序展开后的语句为k=5*5+3*5
。
【示例】输出两个数中较大的数。
- #include <stdio.h>
- #define MAX(a,b) (a>b) ? a : b
- int main(){
- int x , y, max;
- printf("input two numbers: ");
- scanf("%d %d", &x, &y);
- max = MAX(x, y);
- printf("max=%d\n", max);
- return 0;
- }
运行结果:
input