您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

C++条件编译#ifdef #else

时间:01-10来源:作者:点击数:

一般情况下,在进行编译时对源程序中的每一行都要编译。但是有时希望程序中某一部分内容只在满足一定条件时才进行编译,也就是指定对程序中的一部分内容进行编译的条件。如果不满足这个条件,就不编译这部分内容。这就是“条件编译”。

有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。

条件编译命令常用的有以下形式:

1) #ifdef 标识符
    程序段1
#else
    程序段2
#endif

它的作用是当所指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2。#endif用来限定#ifdef命令的范围。其中#else部分也可以没有。

2) #if 表达式
    程序段1
#else
    程序段2
#endif

它的作用是当指定的表达式值为真(非零)时就编译程序段1,否则编译程序段2。可以事先给定一定条件,使程序在不同的条件下执行不同的功能。

【例4.16】在调试程序时,常常希望输出一些所需的信息,而在调试完成后不再输出这些信息,可以在源程序中插入条件编译段。下面是一个简单的示例。

#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<<"\n";  //在调试程序时需要输出这些信息
   #endif //本行为条件编译命令
   cout<<"x*y*z="<<x*y*z<<endl;
}

第3行用#define命令的目的不在于用RUN代表一个字符串,而只是表示已定义过RUN,因此RUN后面写什么字符串都无所谓,甚至可以不写字符串。在调试程序时去掉第3行(或在行首加//,使之成为注释行),由于无此行,故未对RUN定义,第6行据此决定编译第7行,运行时输出x,y,z的值,以便用户分析有关变量当前的值。运行程序输出:

    x=1, y=2, z=3
    x*y*z=6

在调试完成后,在运行之前,加上第3行,重新编译,由于此时RUN已被定义过,则该cout语句不被编译,因此在运行时不再输出x,y,z的值。运行情况为:

    x*y*z=6

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门