条件编译
一、相关知识学习
通常源程序中所有的代码行都参与编译。如果希望部分代码在满足一定条件才参与编译,则可以借助于“条件编译”命令。条件编译根据指定条件,控制不同代码段被编译。
#ifdef #else #endif
#ifdef 条件编译命令测试一个宏是否已经定义。
定义格式:#ifdef 标识符
程序段1
#else
程序段2
#endif
该命令与if else 语句类似,如果指定的标识符代表的宏已经被定义,则在编译阶段只编译程序段1,否则只编译程序段2。编译命令中#else部分也可以省略。
使用条件编译可以提高源程序的通用性。例如,不同的计算机系统在处理整数时,存在一定的差异,DOS系统使用2个字节存放一个整数,Windows 95以后的系统则使用4个字节存放一个整数。为了保证同一程序在上两种系统具有相同的语义,需要对程序的数据类型进行处理。例如:
#ifdef __WIN32
typedef int INT;
#else
typedef long INT;
#endif
上述命令表示如果__WIN32已经被定义,编译命令行:typedef int INT,否则编译命令行typedef long INT。
#ifndef #else #endif
#ifndef条件编译命令用于测试宏没有被定义的条件编译。
定义格式:#ifndef 标识符
程序段1
#else
程序段2
#endif
其作用是如果指定的标识符代表的宏未被定义过,则编译程序段1,否则编译程序段2,#ifndef形式与#ifdef形式类似,但与#ifdef的作用相反。#ifndef等价于#if !defined。
#if #else #endif
#if条件编译命令用于根据常量表达式的结果确定编译过程。
定义格式:#if 常量表达式
程序段1
#else
程序段2
#endif
当处理#if指令时,计算常量表达式,如果表达式的值非0(为真),则编译程序段1,否则编译程序段2。
也可以采用#if #elif #endif方式进行条件编译。
定义格式:#if 表达式1
程序段1
#elif 表达式2
程序段2
#elif表达式3
程序段3
#else
程序段n
#endif
#elif 后面要求有测试表达式,#if #elif #endif 的使用类似于多条件判断语句if else if 的使用方法。在#if和#endif之间可以有多个#elif命令,但最多只能有一个#else命令。
使用时应先定义表达式,对于没有定义过的表达式,#if将其当作值为0。