无参宏定义:宏名后不带参数
- 宏定义与宏展开只是一种简单的符号代换
- 宏定义必须写在函数之外,其作用域为从宏定义开始到程序结束,可以用#undef 终止其作用域
- 宏定义允许嵌套,在宏定义中可以使用已经定义的宏
带参宏定义:在宏定义中的参数称为形参,在宏调用中的参数称为实参
#include <stdio.h>
#define MIN(x,y) (x>y)?x:y
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",10*MIN(a,b));
return 0;
}
输入4,5;输出结果是5
- 宏名与形参表之间不能出现空格
- 在宏调用中实参可以是表达式
#include <stdio.h>
#define SQ(y) (y)*(y) //传递表达式的时候要加个括号
int main(){
int a;
printf("input a number\n");
scanf("%d",&a);
printf("%d\n",SQ(a+1));
return 0;
}
#include <stdio.h>
#define SQ(y) ((y)*(y)) //最好在外面也加个括号
int main(){
int a;
printf("input a number\n");
scanf("%d",&a);
printf("%d\n",16/SQ(a+1));
return 0;
}
函数的调用与宏调用:
主要注意++ 和 --运算符带来的影响