预处理指令是以
#
号为代码开头。下面是部分常用的预处理指令:
指令 | 用途 |
---|---|
# | 空指令无任何效果 |
#include | 包含一个源代码文件 |
#define | 定义宏 |
#undef | 取消已定义的宏 |
#if | 如果给定条件为真,则编译下面代码 |
#ifdef | 如果宏已经定义,则编译下面代码 |
#ifndef | 如果宏没有定义,则编译下面代码 |
#elif | 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 |
#endif | 结束一个#if……#else条件编译块 |
#error | 停止编译并显示错误信息 |
一、条件编译
条件编译指令将决定那些代码被编译,而那些不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。
1.#if指令
#if指令检测关键后的常量表达式。如果为真,则就编译后面的代码,直到出现
#else、#elif或者#endif
为止;否则就不进行编译。
2.#endif
#endif
终值
#if
预处理指令。
#define DEBUG 0
int main()
{
#if DEBUG
代码块1
#endif
代码块2
}
由于程序定义
DEBUG
宏代表0,所以
#if
条件为假,不编译后面的代码直到
#endif
,所以程序直接执行
代码块2
。
3.#ifdef和#ifndef
#define DEBUG
int main()
{
#ifdef DEBUG
代码块1
#endif
#ifndef DEBUG
代码块2
#endif
}
#if defined等价于#ifdef; #if !defined等价于#ifndef
4.#else指令
#else
指令用于某个#if指令之后,当前面的
#if
指令的条件不为真时,就编译
#else
后面的代码。
#endif
指令将中指上面的条件块。
#define DEBUG
int main()
{
#ifdef DEBUG
代码块1
#else
代码块2
#endif
代码块3
}
5.#elif指令
#elif
预处理指令综合了
#else
和
#if
指令的作用。
#define TWO
int main()
{
#ifdef ONE
代码块1
#elif defined TWO
代码块2
#else
代码块3
#endif
}
执行代码块3
二、其他一些标准指令
1.#pragme
#pragma指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。
#pragma region 功能
代码块
#pragma endregion