在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,否则不编译