高级宏定义
目录:
一、高级宏定义
二、不带参数的宏定义
三、带参数的宏定义
一、高级宏定义
作为c语言三大预处理之一,宏定义的作用就是替换,就算宏定义再复杂只是个替换,不做计算,也不做表达式求解,另外的两大预处理就是文件包含、条件编译,然后再进行编译。
二、 不带参数的宏定义
- 为了和普通的变量进行区分,宏的名字通常我们约定是全部由大写字母组成。
- 宏定义只是简单地进行替换,并且由于预处理是在编译之前进行,而编译工作的任务之一就是语法检查,所以编译器不会对宏定义进行语法检查。
- 宏定义不是说明或语句,在末尾不必加分号;
- 宏定义的作用域是从定义的位置开始到整个程序结束;
- 可以用#undef来终止宏定义的作用域;
- 宏定义允许嵌套;
#include <stdio. h>
#define PI 3.14
int main (void )
{
int r;
float s;
printf("请输入圆的半径: ");
scanf("%d", &r);
s=PI*r*r‘;
printf("圆的面积:%.2f\n”,s);
return0;
}
结果:
请输入圆的半径:3
圆的面积是:28.26
#include <stdio h>
#define R 6371
#define PI 3.14
#define V PI * R *R*R*4/ 3
int main(void)
{
printf("地球的体积大概是: %.2f\n", V) ;
return 0 ;
}
结果:
地球的体积大概是:1082657777102.05
三、带参数的宏定义
C语言允许函数带参数,在宏定义中参数称之为形式参数,define叫做形式参数,在int当中叫做实际参数。
#include <stdio. h>
#define MAX(x, у) (((x) > (y)) ? (х) : (y))
int main (void )
{
int x, y;
printf(" 请输入两个整数:”);
scanf ( "%d%d",&x, &y);
printf("%d是较大的那个数! \n", MAX(x, y));
return 0 ;
}
结果:
请输入两个整数:35
5是较大的那个数!
错误写法:
#define MAX (x,y) (((x)>(y))? (x):(y))
#include <stdio . h>
#define SQUARE(x) x * x
int main (void )
{
int x;
printf(" 请输入一个整数:");
scanf("%d", &x) ;
printf(" %d的平方是:%d\n", x, SQUARE);
return 0 ;
}
结果:请输入一个整数:5
5的平方是:25
#include <stdio . h>
#define SQUARE(x) ((x) * (x))
int main (void )
{
int x;
printf(" 请输入一个整数:");
scanf("%d", &x) ;
printf(" %d的平方是:%d\n", x, SQUARE(x));
printf(“%d的平方是:%d\n”,x+1,SQUARE(x+1));
return 0 ;
}
结果:
请输入一个整数:5
5的平方是:25
6的平方是:36