条件编译——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
条件编译
由于C++兼容C语法,所以C的条件编译,在C++中也适⽤。
什么是条件编译
从“条件编译”这个名字上就能看出,所谓“条件编译”其实就是“按照条件去编译”。
也就是“预编译”时,预编译器处理“条件编译”时,可以通过“条件编译”帮你保留某些代码、以及帮你去掉某些代码,第⼆阶段编译时就只编译保留的代码。
⼀般情况下,C源程序中的每⼀⾏代码都要参加编译的,但有时候出于对程序代码优化的考虑、或者其它⽅⾯的考虑,我们只希望对其中⼀部分内容进⾏编译,此时就需要在程序中加上条件(条件编译),让编译器只对满⾜条件的代码进⾏编译,将不满⾜条件的代码舍弃。
条件编译意义
对于跨平台程序,需要在同⼀个程序中编写出针对不同情况(⽐如不同OS、硬件环境)的代码,编译程序时为了编译得到针对不同情况的可执⾏程序,我们需要使⽤条件编译来做选择。
疑问:为什么不直接全部编译呢?
这样⼦会导致我们的可执⾏程序⾮常⼤,因为⾥⾯不仅包含了我们需要的代码,还包含了很多⽤不到的代码。
但是使⽤条件编译将不需要的代码去掉后,就不存在这样的情况了。
程序变⼩之后,程序不管是静态存储在硬盘上,还是运⾏在内存中时,将会⾮常节省计算机的硬盘空间和内存空间。
特别是当你的程序⾮常庞⼤时,⼜或者是当你的计算机资源本来就不是很⾜时,这⼀点就显得更重要了。
条件编译种类
条件编译有2种
第⼀种:#ifdef、#ifndef
第⼆种:#if
共性:
①都可以和#elif、#else的搭配使⽤。
且#elif、#else、defined等,只能与#if #ifdef搭配使⽤,不能独⽴使⽤
②结尾时都是必须使⽤#endif结尾
③条件编译所包含的可以是任何内容
条件编译的排版
条件编译没有互相嵌套时
所有条件编译关键字语句顶格左对齐。
#if 0
...
#elif 1
...
#endif
#ifdef NUM
..
#else
...
#endif
View Code
条件编译之间有嵌套时
嵌套的条件编译需要进⾏缩进,如果⾥⾯有包含#define、#include的话,define、include也需要缩进。
#if !defined __need_FILE && !defined __need___FILE
# define _STDIO_H 1
# include <features.h>
__BEGIN_DECLS
# define __need_size_t
# define __need_NULL
# include <stddef.h>
# include <bits/types.h>
# define __need_FILE
# define __need___FILE
#endif /* Don't need FILE. */
View Code
#是不⽤缩进,#和define、include中间隔有空格是没有问题的。