1、宏定义
定义
- 凡是以“#”开头的均为预处理命令
- define为宏定义命令,无需分号结尾
- 先由预处理程序进行宏代换,用3.1415926置换所有的宏名PI,再进行编译
- 仅仅是替换,在预处理阶段完成
#define PI 3.1415926
注销
```javainclude
define PI 3.1415926
undef PI
int main() { // 此处报错 printf(“%g\n”,PI); return 0; }
<a name="qBFvk"></a>#### 宏嵌套```java#include <stdio.h>#define PI 3.1415926#define S PI*r*rint main(){int r = 4;double area = S;printf("%f",area);return 0;}
带参宏定义
int main()
{
int k = M(5);
printf(“%d\n”,k);
return 0;
}
- 参数可以是表达式,参数最好加括号,防止替换后导致其他问题
```java
#include <stdio.h>
#define M(x) (x)*(x)
int main()
{
int a = 2;
int k = M(a+2); // (a+2)*(a+2) = 16
printf("%d\n",k);
return 0;
}
#define M(x) x*x
int main()
{
int a = 2;
int k = M(a+2); // a+2*a+2 = 8
printf("%d\n",k);
return 0;
}
2、typedef
define D1 char*
typedef char* D2;
int main() { // 最终是char a,char b D1 a,b; // 最终是char x,char* y D2 x,y;
// 8 1 指针长度8个字节
printf("%d %d\n",sizeof(a),sizeof(b));
// 8 8
printf("%d %d",sizeof(x),sizeof(y));
return 0;
}
<a name="xguT3"></a>
### 3、include两种方式
- 两种方式
- "":去用户设置的文件目录去查找
- <>:去源文件目录去查找
```java
#include "stdio.h"
#include <stdio.h>
4、条件编译
define PI 3.14
int main() {
ifdef PI
printf("have PI\n");
else
printf("no PI\n");
endif
ifndef PI
printf("no PI\n");
else
printf("have PI\n");
endif
return 0;
}
- #if
```java
#if 0
printf("11");
#else
printf("22");
#endif
