预处理
1.预处理规则 (在源程序编译之前,对程序进行加工)
条件包含,展开宏,条件编译
2.头文件包含的内容
(1). 包含函数声明
(2). 包含变量声明
(3). 包含宏定义
(4). 包含typedef
(5). 嵌套include
3.通用规则
指令都以#开头
4.变量的宏定义
#define 宏名 替换列表
注意:不添加 “;”
不可有额外符号
拓展:只进行简单替换,不进行正确性检查
5. #undef 取消宏定义
6. 函数宏 节省内存
7. 内联函数 (本质 :函数)
定义: 是更好的宏
关键字 :inline
内联展开要求
(1). 无递归
(2). 无循环
(3). 无复杂的条件分支语句
(4). 代码量较少
8.内联和宏的区别
(1). 内联需要检查参数的正确性, 宏不检查
(2). 内联不一定会被展开,宏一定会被展开
(3). 内联展开在编译阶段,宏在预处理阶段
9. 创建较长的宏
使用do {}while(0)
注意 :while(0)的后面没有“;”
10.条件编译 :
六个预处理指令 :#if, #endif, #ifdef, #ifndef, #elif, #else
一个运算符 :defined
三种基本形式
1. #if 常量表达式...#endif
2.#ifdef DEBUG ... #endif
3. #ifndef DEBUG ... #endif
条件编译的作用
(1). 调试开关
(2). 头文件保护
注意 :defined 测试某个宏是否被定义,是返回1, 否返回0
#if与#endif 之间可以有多个#elif, 但#else只有一个
这两天的英语: multiple(多数的) definition(定义) invalid(无效的) suffix(后缀) previous(以前的)