开发者学堂课程【你的第一门 C 语言课:高级宏定义】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/444/detail/5489
高级宏定义
目录:
一、 高级宏定义
二、不带参数的宏定义
三、带参数的宏定义
一、高级宏定义
作为 c 语言三大预处理之一,宏定义的作用就是替换,就算宏定义再复杂只是个替换,不做计算,也不做表达式求解,另外的两大预处理就是文件包含、条件编译,然后再进行编译。
二、不带参数的宏定义
- 为了和普通的变量进行区分,宏的名字通常我们约定是全部由大写字母组成。
- 宏定义只是简单地进行替换,并且由于预处理是在编译之前进行,而编译工作的任务之一就是语法检查,所以编译器不会对宏定义进行语法检查。
- 宏定义不是说明或语句,在末尾不必加分号;
- 宏定义的作用域是从定义的位置开始到整个程序结束;
- 可以用#undef 来终止宏定义的作用域;
- 宏定义允许嵌套;
#include
#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
圆的面积是:2
8.26
#include
#define R 6371
#define PI 3.14
#define V PI * R *R*R*4/ 3
int main(void)
{
printf("地球的体积大概是: %.2f\n", V) ;
return 0 ;
}
结果:
地球的体积大概是:1
082657777102.05
三、带参数的宏定义
C 语言允许函数带参数,在宏定义中参数称之为形式参数,define 叫做形式参数,在 int 当中叫做实际参数。
#include
#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
#define SQUARE(x) x * x
int main (void )
{
int x;
printf("
请输入一个整数
:");
scanf("%d", &x) ;
printf
(
" %d
的平方是:%
d\n", x, SQUARE)
;
return 0 ;
}
结果:请输入一个整数:5
5的平方是:2
5
#include
#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的平方是:2
5
6的平方是:3
6