目录
一、什么是宏定义?
宏定义是一种替换操作,作用就是内容的替换。
优点:
- 使用宏定义可以简化程序的书写。
- 提高程序的可读性。
- 提高程序的可移植性。
- 方便修改。
(注: 宏定义的替换是在预编译时进行。分享链接:http://t.csdnimg.cn/ZYeND)
二、宏定义的格式
#define 标识符 字符串
三、宏定义的类型
常见的宏定义分为两种:无参宏定义和带参宏定义。
1. 无参宏定义
#define 标识符 字符串
#define PI 3.14 // 宏定义值
#define HELLO "hello world" // 宏定义字符串
后面的宏定义可以引用前面的宏定义
#include <stdio.h>
// 格式: #define 标识符 字符串
#define PI 3.14 // 宏定义值
#define R 2
#define SS PI*R*R // 引用前面的宏定义
#define HELLO "hello world" // 宏定义字符串
int main()
{
int x = 0;
x = SS;
printf("%d %s\n", x, HELLO);
return 0;
}
2. 带参宏定义(值得小白一看(●'◡'●))
#include <stdio.h>
// 宏定义替换(注: 宏定义的替换是在预编译时进行)
#define add_1(x) x+x
#define add_2(x) (x+x)
// 使用宏定义进行替换计算
int main() {
int a = 1, b = 2, c = 3;
// add_1 计算
int sum1 = add_1(a + b) * c; // 10
int sum2 = add_1((a + b)) * c; // 12
int sum3 = (add_1(a + b)) * c; // 18
printf("sum1=%d sum2=%d sum3=%d\n", sum1, sum2, sum3);
printf("\n"); // 换行
// add_2 计算
int sum4 = add_2(a + b) * c; // 18
int sum5 = add_2((a + b)) * c; // 18
int sum6 = (add_2(a + b)) * c; // 18
printf("sum4=%d sum5=%d sum6=%d\n", sum4, sum5, sum6);
return 0;
}
/****
说明:
add_1 计算:
1. sum1 = add_1(a + b) * c; 宏定义替换为 sum1 = a+b+a+b*k;
代入值计算 sum1 = 1+2+1+2*3 = 10
2. sum2 = add_1((a + b)) * c; 宏定义替换为 sum2 = (a+b)+(a+b)*k;
代入值计算 sum2 = (1+2)+(1+2)*3 = 12
3. sum3 = (add_1(a + b)) * c; 宏定义替换为 sum3 = (a+b+a+b)*k;
代入值计算 sum3 = (1+2+1+2)*3 = 18
add_2 计算:
对比add_1多了两个括号. sum4, sum5, sum6, 的值与sum3的计算结果一样。
****/
四、取消宏定义
宏定义作用域就是从定义处开始到文件结束,当我们需要取消宏定义内容时:
#undef 宏名
#define PI 3.14 // 宏定义内容
// 代码内容。。。
#undef PI // 取消宏定义内容
一般来说,我们不需要取消宏定义,意义不大。