1、条件编译概念
有条件的编译,通过控制某些宏的值,来决定编译哪段代码;
- 形式:
①形式1:判断表达式 MACRO 是否为真,据此决定其所包含的代码段是否要编译
②注意:#if形式条件编译需要有值宏
#define A 0
#if A
printf("line:%d\n",__LINE__); // 如果 MACRO 为真,那么该段代码将被编译,否则被丢弃
#endif
2、二路分支
// 二路分支
#if A //MACRO为真就执行
printf("line:%d\n",__LINE__);
#elif B MACRO为真就执行
printf("line:%d\n",__LINE__);
#endif
3、多路分支
// 多路分支
#if A
...
#elif B
...
#elif C
...
#endif
4、判断宏 MACRO 是否已被定义
// 单独判断
#ifdef MACRO //判断MACRO是否定义,定了则执行
...
#endif
// 二路分支
#ifdef MACRO
...
#else
...
#endif
5、判断宏MACRO是否未被定义
// 单独判断
#ifndef MACRO //判断MACRO是否定义,没有定义则执行
...
#endif
// 二路分支
#ifndef MACRO
...
#else
...
#endif
- 总结:
-
#ifdef 此种形式,判定的是宏是否已被定义,这不要求宏有值;
-
#if 、#elif 这些形式,判定的是宏的值是否为真,这要求宏必须有值;
-
#ifdef和#if结尾需要添加#endif表示结束条件,用以包裹代码块选择那一部分代码参与编译。
6、 判断宏MACRO是否未被定义多用在头文件的编写
#ifndef _HEAD_H
#define _HEAD_H
#include <string.h> //等等
...
... (头文件正文)
...
#endif