预处理指令共有三种:
-
宏定义;
-
条件编译;
-
文件包含;
一、预处理指令的执行时刻:
-
在代码翻译成0和1之前
二、预处理指令的特点:
1.预处理指令都是以#号开头;
2.预处理指令的位置可以随便写的;
3.预处理指令的作用域:从编写指令的哪一行代码开始,一直到文件结尾,或者遇到相应的#undef....
三、宏定义(#define)
1.不带参数的宏定义:
- 例:
#define COUNT 4 // 注意:这里没有分号
.......
#undef COUNT
- 注意:
1.宏名一般用大写,或者以K开头
2.双引号里面的不参与替换; 如:char *name = "COUNT"; // 这里的COUNT不会参与替换
2.带参数的宏定义
- 例:
#define pingfang(a) ((a) * (a))
- 注意:
1.带参数的宏定义效率比函数高;
2.宏定义为纯粹的文本替换,不会参与运算,所以在定义又参数的宏定义时,参数和结果都要带上小括号(如上)
3.代码练习(注意陷阱)
运行结果:
四、条件编译(#ifdef/#if defined和#ifndef/#if !defined)
1.条件编译
- 符合了某个条件,后面的代码才会进行编译,不符合就不会进行编译,相当于没有写
- 注意:由于条件编译(预处理指令)都在代码编译前执行,条件的判断不能用代码里面的变量等,条件编译一般与宏定义一起使用;
2.定义
#define A 5
#ifdef A
printf("哈哈哈");
#endif
- 注意:只要写了#ifdef后面一定要写#endif,不然后果很严重,(条件若不成立,#ifdef后面的代码相当于全部不参与编译)
3.#if defined和#if !defined
- #if defined (A) == #ifdef A // A是宏名
- #if !defined (A) == #ifndef A
五、文件包含(#include)
1. #include<文件名> 表示:系统自带的文件;
2.#include"文件名" 表示:自定义的文件;
3.不允许循环包含;如:a.h文件中包含b.h而b.h文件中又包含a.h;
4.多文件开发
-
注意:采用文件名做宏名,因为文件名是唯一的;
时间: 2024-10-05 04:43:17