C++中#ifdef、#endif等宏的使用

来源:互联网 发布:mac怎么切换独立显卡 编辑:程序博客网 时间:2024/06/06 20:46

一般情况下,源程序中所有的行都参加编译。但是有时希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句,这就是“条件编译”。

为了满足条件编译可以使用#ifdef#ifndef#endif等宏指令。

条件编译命令最常见的形式为:

(1)如果宏定义了标识符1,则执行程序段1。

#ifdef  标识符1

    //程序段1

#endif

(2)如果宏定义了标识符1,则执行程序段1;否则执行程序段2。

#ifdef  标识符1

    //程序段1

#else

    //程序段2

#endif

上面的“程序段”可以是语句组,也可以是命令行。“标识符”可以使表达式。#ifdef可以由#ifndef替换,定义完全相反,如(1)中#ifdef由#ifndef替换

 

 

下面具两个例子说明#ifdef、#ifndef、#endif等宏指令的使用。

例子1:

如果我们在编写程序时,调试时希望输出一些信息以便于调试,而调试完成后这些信息是不需要输出的,那么我们可以这么做:

#define  DEBUG

 

#ifdef  DEBUG

    //调试时需要输出的信息语句

#endif

当我们调试完成后,直接把语句#define  DEBUG删掉即可,然后#ifdef DEBUG和#endif之间定义的语句便不会被执行。

 

例子2 :

当A 大于0输出A,A小于0输出-A

#ifdef  ISPOSITIVE

 

#ifdef  ISPOSITIVE

    cout<<A;

#else

    cout<<-A;

#endif

假设我们输入的一直是正数,则定义#ifdef ISPOSITIVE,如果输入一直是负数,则删掉定义#ifdef ISPOSITIVE即可。

 

总结:

条件编译可以提高C++源程序的通用性。比如例子1中如果输出信息特别多,不使用条件编译也行,但是修改程序量太大。

采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。比如例子2如果用if语句代替,那么if语句的所有内容都需要编译,即目标程序太长,而使用条件编译则选择性编译,缩减了目标函数长度(如果语句十分长,完全体现了这种优势)。

 

1 0