C++条件编译#ifdef #else

时间:2014-10-17 22:25    点击:

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

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

条件编译命令常用的有以下形式:
1) #ifdef 标识符
    程序段1
#else
    程序段2
#endif

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

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

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

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

			
  1. #include <iostream>
  2. using namespace std;
  3. #define RUN //在调试程序时使之成为注释行
  4. int main( )
  5. {
  6.    int x=1, y=2, z=3;
  7.    #ifndef RUN  //本行为条件编译命令
  8.    cout<<"x="<<x<<", y="<<y<<", z="<<z<<"\n";  //在调试程序时需要输出这些信息
  9.    #endif //本行为条件编译命令
  10.    cout<<"x*y*z="<<x*y*z<<endl;
  11. }

第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 

来源:未知//所属分类:基础教程/更新时间:2014-10-17 22:25
顶一下
(3)
100%
踩一下
(0)
0%
上一篇:C++文件包含处理#include
下一篇:C++数组的概念,一维数组,二维数组
相关内容