一般情况下,在进行编译时对源程序的每一行都要编译。但是有时希望程序中某一部分的内容只在满足一定条件时才进行编译,也就是指定对程序中的一部分内容进行编译的条件。如果不满足这个条件,就不编译这部分的内容。这就是条件编译。
一般用在程序的调试上。
条件编译命令常用的有以下形式:
1.它的作用是当所指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2,#endif用来限定#ifdef的命令范围。其中#else部分也可以没有。
#ifdef 标识符
程序段1
#else
程序段2
#endif
2.只是第一行与第一种的形式不一样:将ifdef改为ifndef,其中的n代表not。它的作用是若标识符未被定义过,则编译程序段1,否则编译程序段2.这种形式与第一种形式的作用相反。
#ifndef
程序段1
#else
程序段2
#endif
3.它的作用是当指定的表达式值为真(非零)的时候,就编译程序段1,否则编译程序段2。可以事先给定一个条件,使得程序在不同的条件下执行不同的功能。
#if 表达式
程序段1
#else
程序段2
#endif
例子:
#include <iostream>
using namespace std;
#define RUN
int main(){
int x = 1, y = 2, z = 3;
#ifndef RUN
cout << "X=" << x << ",Y=" << y << ",Z=" << z;
#endif
cout << "x*y*z=" *y*z << endl;
return 0;
}
第三行使用#define命令的目的不在于用RUN代表一个字符串,而是表示已经定义过RUN,因此在RUN后面些什么字符串都无所谓,甚至可以不写字符串。在调试程序时去掉第三行或者注释,由于无此行,故未对RUN定义,第七行据此决定编译第八行,运行时输出线x,y,z的值,以便用户分析有关变量当前值。