一般情況下,在進行編譯時對源程序的每一行都要編譯属愤。但是有時希望程序中某一部分的內容只在滿足一定條件時才進行編譯,也就是指定對程序中的一部分內容進行編譯的條件住诸。如果不滿足這個條件,就不編譯這部分的內容涣澡。這就是條件編譯。
一般用在程序的調試上暑塑。
條件編譯命令常用的有以下形式:
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±窖冢可以事先給定一個條件,使得程序在不同的條件下執(zhí)行不同的功能杖挣。
#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的值,以便用戶分析有關變量當前值躲因。