条件编译

条件编译,是让编译器在条件满足时才进行编译,否则编译器就会忽略。 
条件编译块,其语法结构为: 
#if [必须] 
#elif [可选] 
#else [可选] 
#endif [必须] 
另外下面的形式是等价的: 
#ifdef (identifer)<==> #if defined (identifer) 
#ifndef (identifer) <==> #if !defined (identifer) 

其作用依赖于你的写法和意图,例如: 
(1)防止头文件被重复编译,在头文件windows.h中我们看到一个最大的条件编译块: 
#ifndef _WINDOWS_ //位于头文件有效代码最顶部 
#define _WINDOWS_ 
//... 
#endif // 位于头文件尾部 
那么如果你的工程实现文件中重复包含了windows.h也不会导致问题,因为windows.h在被第一次编译的时候就定义了_WINDOWS_ 标识,下次编译器不会再编译条件编译块之间的代码了,因为条件为假。 

(2)检测CPU类型 
#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_IX86) 
#define _X86_ // Intel公司提供的 X86系列CPU 
#endif 

#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_AMD64) 
#define _AMD64_ // ADM公司提供的CPU 
#endif 

#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_M68K) 
#define _68K_ // 苹果电脑通常使用一种CPU 
#endif 

#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_MPPC) 
#define _MPPC_ // 苹果电脑通常使用另一种CPU 

#endif 

(3)检测硬件平台 
#ifndef _MAC 
#if defined(_68K_) || defined(_MPPC_) // 如果使用了这两种类型的CPU 
#define _MAC // 则为苹果电脑的硬件平台 
#endif 
#endif 

所以楼主的理解基本是对的,当然条件编译块的用途实在是太多了,你当然可以把它嵌入你的源代码中,控制编译器有选择地编译,而不是仅仅在头文件中使用。 

我要指出楼主一点小小的错误: 
如果定义了_MAC标识,是指的苹果电脑的硬件平台,而不是苹果操作系统。事实上,苹果电脑上现在也可以装windows操作系统。 

要知道编译器对不同的硬件平台(主要指CPU类型)生成的机器码是不同的,所以界定硬件平台是重要的,但是由于我们基本上都是使用的X86系列CPU,所以实际也不需要太关心这个。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值