预处理指令
一.文件包含: #include <> 复制代码
是C语言中的一个预处理指令:把一个文件的内容拷贝到这行命令所在的位置.
二.宏定义: 替换代码的预处理指令(在编译之前)
在编译之前进行代码替换.
当需要一些重复性代码或简单的函数运算.
#include <stdio.h>
#define KLength 6
int main(){
printf("%d\n",KLength); //运行结果:6
printf("%d\n",KLength+10); //运行结果:16
#undef KLength //结束替换
int KLength=20;
printf("%d\n",KLength+10); //运行结果:30
return 0;
}
特点:
1.命名尽量以大写或小写K开头,便于区分(规范);
2.被双引号引起来的不会被替换.
3.宏定义只会做代码替换,不会关注任何逻辑,容易出现优先级错误(加括号解决).
#include <stdio.h>
#define KAdd(a,b) a+b //不加括号是不正确的
//#define KAdd(a,b) (a)+(b) //正确
int main(){
int a=KAdd(3,4)/KAdd(3, 2); //运行结果:6 运行原理:3+4/3+2
printf("%d\n",a);
return 0;
}
4.替换可以设置作用域,如果不设置,作用域则是这行代码出现到代码的最后一行.
三.条件编译: 满足条件才编译,提高编译效率
普通用法:
#include <stdio.h>
#define KA 5
int main(){
#if (KA==5)
printf("KA==5\n");
#elif(KA==3)
printf("KA==3\n");
#else
printf("else==\n");
#endif //结束条件编译 只对离其最近的一个#if起作用
return 0;
}
与宏定义相关的用法
#include <stdio.h>
#define KA 5
int main(){
#ifdef KA
printf("ifdef KA==\n"); //定义KA宏定义执行 //运行结果:ifdef KA==
#endif
#ifndef KA
printf("ifndef KA==\n"); //未定义KA宏定义执行
#endif
return 0;
}
特点:1.条件编译不能访问需要编译后才能执行的代码
#include <stdio.h>
#define KA 5
int b=3; //无论b的值如何变,结果不变
int main(){
int a=5; //无论a怎么变,结果都是不变的
#if(a==0||b==0)
printf("a==0\n"); //运行结果:a=0
#else
printf("其他\n");
#endif
}
2.条件编译不需要用大括号,所以必须加上结束标示,否则涵盖下面的所有代码.
3.条件编译一般跟宏定义配合使用,防止重复包含及交叉包含.