C++ 条件编译

条件编译:按照不同的编译条件去编译不同的程序代码,从而使一个源程序在不同的编译条件下生成不同的目标程序。

C++提供几种条件编译指令,以一个表达式或者某个宏是否被定义的条件作为编译条件。

     指令             用途
    #           空指令,无任何效果
    #include    包含一个源代码文件
    #define     定义宏
    #undef      取消已定义的宏
    #if         如果给定条件为真,则编译下面代码
    #ifdef      如果宏已经定义,则编译下面代码
    #ifndef     如果宏没有定义,则编译下面代码
    #elif       如果前面的#if给定条件不为真,当前条件为真,则编译下面代码,其实就是else if的简写
    #endif      结束一个#if……#else条件编译块
    #error      停止编译并显示错误信息

条件编译命令形式:
1) #ifdef 标识符
    程序段1
#else
    程序段2
#endif

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


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

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


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

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

示例1

#include <iostream>
#define LETTER 1
int main()
{
	char c,str[]="Language";
	int i = 0;
	while(c = str[i++]!='\0'){
		#if LETTER
			if(c>='a'&&c<='z')
				c = c-32;
		#else
			if(c>='A'&&c<='Z')
				c = c+32;
		#endif
			cout << c;
	}	
 }
由于LETTER为真,对第一个if语句进行编译,将小写字母转换成大写字母,输出'LANGUAGE';若LETTER为假,编译第二个语句块,输出为小写;

示例2

#include <iostream>
using namespace std;
#define DEBUG 
int main( )
{
   int nDebug = 50;
   int nRelese = 60;
   #ifndef DEBUG //本行为条件编译命令
   cout << "Debug : value of version: " << nDebug << endl; 
   #else
   cout << "Relese : value of version: " << nRelese << endl;
   cout << "end" << endl;
}


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

Relese : value of version: 60

end


在调试完成后,在运行之前,加上第3行,重新编译,由于此时DEBUG已被定义过,运行情况为:

Debug: value of version: 50

end

好处:减少被编译的语句,从而减少目标程序的长度,并且提高了程序的可移植性(比如条件是不同平台或者语言之类的),增加了程序设计的灵活性。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值