在 C 语言 中,一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是 “条件编译”。
有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译功能可按不同的条件去编译不同的程序部分,从而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。
C 语言条件编译有三种形式,分别为:#ifdef
形式,#ifndef
形式和 #if
形式,它们的区别如下:
条件编译指令 | 描述 |
---|---|
#ifdef |
如果标识符已被 #define 命令定义过,则编译,否则不编译 |
#ifndef |
如果标识符未被 #define 命令定义过,则编译,否则不编译 |
#if |
如果常量表达式的值为真(非0),则编译,否则不编译 |
作用 | 描述 |
---|---|
屏蔽跨平台差异 | 在大规模开发过程中,特别是跨平台和系统的软件里,可以在编译时通过条件编译设置编译环境。 |
包含程序功能模块 | 可以使用 #ifdef 实现包含程序的不同的功能模块。 |
开关调试信息 | 调试程序时,常常希望输出一些所需的信息以便追踪程序的运行。而在调试完成后不再输出这些信息,可以通过条件编译控制。 |
防止头文件重复包含 | 头文件(.h)可以被头文件或 C 文件包含。由于头文件包含可以嵌套,C 文件就有可能多次包含同一个头文件;或者不同的 C 文件都包含同一个头文件,编译时就可能出现重复包含(重复定义)的问题。 |
在 C 语言中,一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是 “条件编译”。