这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑战
介绍
#if 和 #endif是一组同时使用的,叫做条件编译指令。
#if 与 #define、#include等指令一样是由预处理器这个强大的工具处理的,
预处理器可以在编译前处理c程序。
条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。
最常见的条件编译是防止重复包含头文件的宏,形式跟下面代码类似:
#ifndef LED_H
#define LED_H
#endif // #ifndef LED_H
条件编译中使用的预编译指令
#define 定义一个预处理宏
#undef 取消宏的定义
#if 编译预处理中的条件命令,相当于C语法中的if语句
#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef 与#ifdef相反,判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的 #elif 条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined 与#if, #elif配合使用,判断某个宏是否被定义
预编译指令应用举例
1. #define、#undef
#define命令定义一个宏:
#undef可以取消宏定义,与#define对应。
2. defined
defined用来测试某个宏是否被定义。defined(name): 若宏被定义,则返回1,否则返回0。
它与#if、#elif、#else结合使用来判断宏是否被定义,defined可用于在一条判断语句中声明多个判别条件;#ifdef和#ifndef则仅支持判断一个宏是否定义。
#if defined(VAX) && defined(UNIX) && !defined(DEBUG)
和#if、#elif、#else不同,#ifdef、#ifndef、defined测试的宏可以是对象宏,也可以是函数宏。
实例讲解
#include <stdio.h>
#define class_1 0
#define class_2 1
int main()
{
#if class_1
printf("class_1\n");
#endif
#ifdef class_2
printf("class_2\n");
#endif
return 0;
}
运行结果图
可以明显看出,程序没有执行
#if class_1
#endif
中的程序,这是因为,在程序的开头已经定义了class_1为0,而class_2为1,程序遇见
#if
#endif
只执行#if后面是1的程序段,而不执行后面是的程序段。
这就是条件编译指令的用法。