C语言中的条件编译及编译预处理

时间:2023-01-04 22:19:13

在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。使用条件编译,可以通过预编译指令来设置编译条件,根据不同的需要来编译不同的代码

预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换

下面是部分预编译指令及其用途

指令               用途

#  空指令,无任何效果

#include      包含一个源代码文件

#define 定义宏

#undef 取消已定义的宏

#if 如果给定定义条件,则编译下面的代码

#ifdef 如果宏已经定义,则编译下面的代码

#ifndef 如果宏没有定义,则编译下面的代码

#elif 如果前面的#if给定的条件不为真,当前条件为真,则编译下面的代码(else if的缩写)

#endif 结束一个#if......#else条件编译块

#error 停止编译并显示错误信息

Eg:#if A

语句块1

#endif

=>如果A为真,则编译语句块1,否则不编译

Eg:#ifdef B

语句块2

#endif

=>如果定义了B的宏,则编译语句块2,否则不编译

Eg:#ifndeif C

语句块3

#endif

=>如果没有定义C的宏,则编译语句块3,否则不编译