- 一、宏定义:1.数值宏常量:const修饰的只读变量不能用来作为定义数组的维数,也不能放在case关键词后面。
- 字符串宏常量:定义字符串,尤其是路径 如:
#define ENG_PATH_3 E:\English\listen_to_this\listen\
_to_this_3 在这里路径太长的,可以用反斜杠接续符,正如上篇所说的反斜杠作为接续符时,在本行后面不能再有任何字符,空格都不行
- 不能用宏开始或结束一段注释,因为注释先于预处理指令被展成//……或/*……*/时,注释已处理完毕。
- 用define宏定义表达式:在这里不要吝啬括号就行。宏函数被调用时是以实参代换形参。而不是“值传送”。
- #undef是用来撤销定义宏的
- 二、条件编译:三种形式:
1.#ifdef 标识符
程序段1
#else
程序段2
#endif
如果标识符已被#define命令定义过则对程序段1进行编译,否则对程序段二进行编译
2.ifndef 标识符
程序段1
#else
程序段2
#endif
这个与第一种形式的功能正好相反
- #if 常量表达式
程序段1
#else
程序段2
#endif
如果常量表达式的值为1,则执行程序段1.为0,则执行程序段2
- 三、文件包含
文件包含可用于把多个文件连接成一个源文件进行编译,结果将生成一个目标文件。
C语言提供#include命令来实现文件包含的操作,它实际上是宏替换的延伸,分为两种:
- #include<filename> <>中是要包含文件的名称,用尖括号括起来,说白了就是我们所说的头文件。
- #include”filename” 基本与1中类似
值得一提的是两者的查找路径不同:1:从编译器自带的函数库中寻找文件。2:先从自定义的文件中寻找,如果找不到就从函数库中寻找。
#include也支持相对路径 .代表当前目录 ..代表上层目录
- 四、#error预处理
编译程序时,只要遇到#error就会生成一个编译错误的提示消息,并停止编译。
语法格式: #error error-message
- 五、#line预处理
改变当前行数和文件名称 基本格式如下:#include number [“filename”] 其中【】内的文件名可以省略 例子: #line 30 a.h
- 六、#prama预处理
设定编译器的状态或者指示编译器完成一些特定的动作
- #pragma message
在编译信息输出窗口中输出相应的信息。 #pragma message(“消息文本”)
- #pragma pack()
- 七、内存对齐的要点
- 每个成员按自己的方式对齐,并最小化长度
- 复杂结构(结构体)的默认对齐方式为和他最长的成员对齐
- 对齐后的长度必须是最大对齐参数的整数倍
- 八、##预运算符
#define XNAME(n) x##n
XNAME(8) ------> x8 ##实际上就是“粘合剂”,就是将前后两部分连接起来。