指令 用途
# 空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
#if 如果给定条件为真,则编译下面代码
#ifdef 如果他后面的宏值之前已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个#if……#else条件编译块
#error 停止编译并显示错误信息
#error 将使编译器显示一条错误信息,然后停止编译。
#line 可以改变编译器用来指出警告和错误信息的文件号和行号。
#pragma 没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。
条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏被定义的内容来确定编译条件。
1.#if指令
#if指令检测跟在他后边的常量表达式是否为真。如果表达式为真,则编译后面的代码,直到出现#else、#elif或#endif为止;否则就不编译。
2.#endif指令
#endif用于终止#if预处理指令。
#define DEBUG 0
main()
{
#if DEBUG
printf("Debugging\n");
#endif
printf("Running\n");
}
由于程序定义DEBUG宏代表0,所以#if条件为假,不编译后面的代码直到#endif,所以程序直接输出Running。
如果去掉#define语句,效果是一样的。
3.#ifdef和#ifndef
ifdef表示它后面的宏如果是之前定义的宏就执行下面语句,ifndef表示如果不是它后面的宏就执行下面语句。 这两个可以单独使用。
#define DEBUG
main()
{
#ifdef DEBUG
printf("yes\n");
#endif
#ifndef DDEBUG
printf("no\n");
#endif
}
结果会是
yes
no
#ifdefined等价于#ifdef; #if !defined等价于#ifndef
4.#else指令
#else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码。
#define DEBUG
main()
{
#ifdef DEBUG
printf("Debugging\n");
#else
printf("Not debugging\n");
#endif
printf("Running\n");
}
5.#elif指令
就像语句中的else if语句。
#define TWO
main()
{
#ifdef ONE
printf("1\n");
#elif defined TWO //defined不能少,它后面有一个d。
printf("2\n");
#else
printf("3\n");
#endif
}
结果:2