基本使用
#include <stdio.h>
#define N 100
int main(){
int sum = 20 + N;
printf("%d\n", sum);
return 0;
}
一般形式
#define 宏名 字符串
这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符串等同,它不需要双引号。
- '#'表示这是预处理 命令
- define 是一条预处理命令
- 宏名命名规范和标识符一致
- 字符串 可以是常数, 表达式, 狭义字符串等
举例
- 反复使用的表达式
#include <stdio.h>
#define M (n*n+3*n)
int main(){
int sum, n;
printf("Input a number: ");
scanf("%d", &n);
sum = 3*M+4*M+5*M;
printf("sum=%d\n", sum);
return 0;
}
在预处理时经宏展开后该语句变为:sum=3*(nn+3n)+4*(nn+3n)+5*(nn+3n);
需要注意的是,在宏定义中表达式(nn+3n)两边的括号不能少,否则会发生错误。
注意点
#define PI 3.14159
int main(){
// Code
return 0;
}
#undef PI
// 表示PI只在main函数中有效,在func中无效。
void func(){
// Code
}
- 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换,例如:
#include <stdio.h>
#define OK 100
int main(){
printf("OK\n");
return 0;
}
//运行结果:OK
- 宏定义允许嵌套
- 习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母
- 可用宏定义表示数据类型,使书写方便。
与typedef 不同