1.预处理指令的定义('#'开头)
再进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。
预处理指令包括:1)宏定义 2)文件包含 3)条件编译
2.宏替换的定义
源程序在编译之前,由预处理程序对我们写的源代码进行处理,把源代码中所有出现宏名的地方使用宏字符串替换。
3.宏的使用注意
1)作用域
#define M 3 到#undef M
2)字符串中宏名不被替换
printf("M=%d",M);
3)宏定义可以嵌套
#define R 4
#define pi 3.14
#define AREA pi*R*R
4)取别名
#define INT int
4.有参宏的定义和使用
#define 宏名(形参列表) 字符串
- #include <stdio.h>
- #define SUM(a) a+a
- int main(){
- int r = SUM(3);
- return 0;
- }
- #intclude <stdio.h>
- #define M(x,y) x*y+x+y
- int main(){
- int r = M(3,4);
- return 0;
- }
复制代码
1)形参之前可以出现空格,宏名和参数之间不能出现空格
2)字符串中每一个字符最好都用()括起来
- #include <stdio.h>
- #define M(x,y) x*y+x+y
- int main(){
- int a=3r;
- r=M(a+3,a-1);
- //r=a+3*a-1+a+3+a-1;
- //#define M(x,y) (x)*(y)+(x)+(y)
复制代码
5.条件编译
- #include <stdio.h>
- #define SCORE 76
- int main(){
- #if SCORE <60
- printf("Range E");
- #elif SCORE <70
- printf("Range D");
- #elif SCORE <80
- printf("Range C");
- #elif SCORE <90
- printf("Range B");
- #else
- printf("Range A");
- #endif
- return 0;
- }
复制代码
6.debug调试
- //DEBUG是系统使用的标示符,此处不能使用
- #define DEBUG 0
- #if DEBUG==1
- //显示调试信息
- #define Log(format,...)printf(format,##__VA_ARGS__))
- #else
- #define Log(format,...)
- #endif
- int main(){
- Log(...);
- return 0;
- }
复制代码 |
|