不带参数的宏定义
在单片机教程中就已经学到了;
用法1:
#include <stdio.h>
#define PI 3.14//注意不要加;
int main(void)
{
int r;
float s;
printf("请输入圆的半径:");
scanf_s("%d", &r);
s = r * r * PI;
printf("圆的面积是:%.2f", s);
return 0;
}
还可以嵌套:
#include <stdio.h>
#define PI 3.14//注意不要加;
#define R 6371
#define V PI * R * R * R * 4 / 3
int main(void)
{
printf("地球的体积约为:%.2f", V);
return 0;
}
带参数的宏定义
#include <stdio.h>
#define MAX(x,y) (((x) > (y)) ? (x) : (y))
int main(void)
{
int x, y;
printf("请输入两个整数:");
scanf_s("%d %d", &x, &y);
printf("更大的数字是:%d", MAX(x, y));
return 0;
}
注意:MAX和(形参)之间不可以有任何空格。
在进行这一步时要注意括号的使用,尽量把每个形参用括号括住,因为这仅仅是把形参简单替换成实参。
例子:
#include <stdio.h>
#define SQUARE(x) x * x
int main(void)
{
int x;
printf("请输入一个整数:");
scanf_s("%d", &x);
printf("%d的平方是%d\n",x, SQUARE(x));
printf("%d的平方是%d",x + 1, SQUARE(x + 1));
return 0;
}
在不加括号括住形参的情况下,因为把形参简单替换为实参的特性,导致结果:
加括号后:
#include <stdio.h>
#define SQUARE(x) ((x) * (x))
int main(void)
{
int x;
printf("请输入一个整数:");
scanf_s("%d", &x);
printf("%d的平方是%d\n",x, SQUARE(x));
printf("%d的平方是%d",x + 1, SQUARE(x + 1));
return 0;
}
但是还是不建议使用这种宏定义去替代该有的函数,这会导致一些BUG