基 础 概 括(预处理指令)重点
预处理指令:在代码编译到0跟1之前,所运行的指令。
特点:
1,先进行。
2,以#开头。(所有预处理指令都必须以#开头,宏名必须大写或以K开头)
3,地方随便你写,哪都行。
预处理指令的作用域:(预处理指令后不写分号)
从编写指令的那一行到文件结尾。
一 宏定义分两种:
1,不带参数的;
2,带参数的;
宏名:就是在编译之前把宏名替换成想换的内容。
注意:在双引号里面的“宏名”不会被替换。
#define
#undef(取消宏定义)
小语法:#define sum (v1 , v2) ( (v1) + (v2) ) 意思是把左面的东西 替换成右边的加法运算。
经验:右边括号里的参数必须把每个参数都用小括号括起来,以防止出现运算错误。
宏定义只负责换代码,纯文本替换。
函数在运行时调用,宏定义在翻译前运行,以此宏定义比函数运行运行的性能要好。
二 条件编译
条件编译:以#开头,在编译0跟1之前编译。
满足一定条件才可以编译,不满足不要编译。
例子:
#define A 10
int main()
{
#if (A == 10)
{
printf("10\n");
}
#elif (A == 5)
{
printf("5");
}
#else
{
printf("其他值");
}
#endif 必须加上 #endif表示从这里结束,后面的语句不属于判断范围。
return 0;
}
如果在第一个条件符合,后面所有的条件都不编译,编译到0跟1.
与原有函数比较,原有函数不管成不成立都先进行编译后在进行比较,条件就是不满足,也都把代码编译了个遍。
以此,条件编译在性能上大大优越于原有函数的性能。
三 文件包含
#include<> <>表示系统自带的文件。
#include" " " "表示自定义的文件。
绝对不允许嵌套包含,循环包含 比如: a包含.h b包含.h ,b包含.h a包含.h。
怎样保证在编写代码是,头文件的声明文件,不会被重复拷贝。
方法: #ifndef ABC
#define ABC
#endif
这种形式在多文件开发中使用。一般会以自己的文件名为头名。
如:#ifndef Li si _H
#define Li si _H
#endif
注意:文件开头必须大写。