(转载)C/C++条件编译的相关知识点

链接:

http://blog.csdn.net/ryf8805/article/details/4775515


情况1:预处理指示符(条件指示符)ifdef:
#ifdef _XXXX
   ......
#else
   ......
#endif

用来判断一个预处理器常量是否已经被定义,以便有条件的包含程序代码。

  作用:可以很方便的开启/关闭整个程序的某项特定功能。


情况2:预处理指示符(条件指示符)ifndef


# ifndef FILE_H   

# define FILE_H

/*file.h*/

#else 
    .....

#endif


这里的#ifndef,表示的是if not def。表示如果FILE_H常量没有被定义,则程序会初始化一个默认值,执行预编译里面的内容;
  作用:可以防止头文件的重复编译(嵌套包含).


情况3:
#if 常量
...程序段1...
#else
...程序段2...
#endif


表示如果常量为真(非0),就执行程序段1,否则执行程序段2。
  作用:这种方法可以将测试代码加进来。当需要开启测试的时候,
  只要将常量变1就好了。而不要测试的时候,只要将常量变0。


 有人会问:不用条件编译命令而直接用if语句也能达到要求,用条件编译命令有什么好处呢?的确,此问题完全可以不用条件编译处理,但那样做目标程序长(因为所有语句都编译),而采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。


条件编译案例:

#include "stdafx.h"
#include <iostream>
using namespace std;

#define NUM 0

int main(int argc, char* argv[])
{
    #ifdef NUM

		printf("NUM已经宏定义过了!\n");

	#else

	    printf("NUM还没有宏定义过!\n");

//结束预编译
#endif


//编译预处理语句
#ifndef _NUM_
#define _NUM_
	
		printf("只能进行一次编译,防止重复编译!\n");	
		
//结束编译预处理
#endif


#if 1
   printf("非0表示为真,执行!\n");
#else 
   printf("为0表示假,不执行!\n");
#endif
  

	return 0;
}

        编译C++程序时,编译器自动定义了一个预处理器名字__cplusplus,可以根据他来判断该程序是不是C++程序,以便有条件编译一些代码。另外两个比较有用的预定义名字是:__LINE__和__FILE__。前者记录文件已经被编译的行数,后则包含正在被编译的文件的名字。另外__TIME__和__DATA__表示当前时间和日期。


       


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值