所有的预处理指令都是以#开头
预处理指令分为三种:宏定义、条件编译、文件包含
预处理指令在代码翻译成0和1之前执行
预处理的位置是随便写的
预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾
宏名一般用大写或者以k开头,变量名一般用小写(如:kConut、CONUT)
一、宏定义
宏定义分为两种:带参和不带参。
无参数宏定义格式:#关键字 宏名 值
#define H_value 4 //定义宏
定义好的这个宏,会在编译之前把所有用到 H_value 这个宏的值全部替换成 常量值 4,字符串里面的内容除外
#undef H_value //结束宏定义
带参数宏定义格式:#关键字 宏名(参1,参2) (表达式)....n
#define sum(v1,v2) ((v1)+(v2)) //利用宏定义计算两个数的和。
注意:宏定义只会替换代码,不会进行运算,每个参数都必须带括号,结果值也必须加括号
带参数的宏定义比函数的运行效率高,如果简单的运算可以采用宏定义
二、条件编译
条件编译与if…else if…else 差不多,条件成立编译,否则不编译
定义格式:
#define a 10 //首先得有宏定义的条件
#if (条件..) //这个条件必须是宏变量中的值
代码块..
#elif (条件..)
代码块..
#else (条件..)
代码块..
#endif //必须要加的条件 结束条件编译
判断宏
#define max //定义了一个宏变量 max
#if !defined (max) ==> #ifdef max //判断如果没有定义max宏变量就编译这判代码
code....
#endif //上面的判断结束
#if defined (max) ==>#ifndef max //如果定义了max变量就编译这下面的代码
code...
#endif //结束
三、文件包含
文件包含的作用:就是把文本拷贝到当前代码块
注意:<>表示系统自带的文件,“”表示自定义的文件
不允许循环包含,比如:a.h包含a.h,b.h又包含a.h
在.h文件中前面必须写
#ifndef 文件名 如:#ifndef FILENAME_H
#defined 文件名 #defined FILENAME_H
code......
#endif