C语言的预处理指令有三类,一是宏定义,二是文件包含,三是条件编译。预处理命令以符号“#”开头
1 宏定义
宏定义主要是#define,其又分为带参数定义和不带参数定义,例子如下
带参数定义
#define PI 3.14
不带参数定义
#define ST STR
在一些头文件定义中常使用
#define EXAMPLE(标识符)
其把EXAMPLE定义为空值,目的是为了防止头文件被多次包含,虽然可以省略,但是一般不能省略
此外,#undef 可以终止宏名的定义
宏展开只是简单的字符串替换,简单宏常用于定义常量,宏没有类型,也没有优先级的概念,使用定义常量主要用于指定数组长度 #define ayyLength 256 ,建议尽量使用const或enum代替宏定义常量 constint arrLen 256; 。建议不使用宏定义类型 #define Status int 而是用typedef关键字 typedef Statusint; 。
2 文件包含
文件包含就是指头文件,如#include “reg51.h”等
3 条件编译
条件编译指令有:#if、#elif、#else、#ifdef、#ifndef,例子如下:
#define URMD 0
#if URMD == 0
程序块1
#elif URMD == 1
程序块 2
#else
程序块 3
#endif
上述条件编译例子,是在宏条件符合时,编译器就编译这段代码,否则不编译,它跟不带“#”的区别就在于一般的条件语句使所有条件的代码都会被编译生成执行代码,而预处理条件语句则是只编译符合条件的那部分代码,其它不合条件的不会生成执行代码。
因此,一般条件在编译前就确定了,那么就使用预处理条件,如果需要在程序运行过程中才能判断,则使用一般的条件语句
#ifdef A
程序块1
#else
程序块 2
#endif
如果有宏定义标识符A,那么执行程序块1,否则执行程序块2,#else部分也可以不用。
#ifndef B
程序块 1
#else
程序块 2
#endif
如果没有宏定义标识符B,那么执行程序块1,否则执行程序块2,#else也可以不用。