C语言预处理指令如#endif
正文
C 语言预处理指令是以 # 开头的指令,由预处理程序(预处理器)操作,虽不属于 C 语言语法,但扩展了 C 语言的功能。
在程序编译前,预处理器先处理源程序中的预处理指令,其输出再交给编译器进行语法检查等后续操作。
- 文件包含:
#include
是最常用的预处理指令,用于将指定文件的内容嵌入到当前源文件中。格式有两种:- 尖括号形式:如
#include <math.h>
,预处理器直接到系统目录对应文件中搜索math.h
文件,系统提供的头文件一般采用该方式。 - 双引号形式:如
#include "cal.h"
,首先到当前工作目录下查找该文件,若未找到,再到系统目录下查找,自定义头文件一般采用此方式
- 尖括号形式:如
- 宏定义:
- 定义宏
#define
:可定义无参数宏和带参宏。无参数宏常用于定义符号常量,如#define pi 3.1416
;带参宏如#define S(a, b) a * b
。 - 宏删除
#undef
:用于删除已定义的宏,如#undef pi
,删除之前对pi
的宏定义。 -
- 定义宏
3.条件预处理
#include <stdio.h>
#if 1 < 0
#define width 500
#elif 2 > 3
#define width 600
#else
#define width 666
#endif
int main() {
printf("%d", width);
return 0;
}
在这个例子中,#if
、#elif
、#else
和 #endif
搭配使用。由于 1 < 0
和 2 > 3
都为假,所以最终 width
被定义为 666
,程序运行时会输出 666
#endif是结束标识符
4.
#include <stdio.h>
#define DEBUG // 定义DEBUG宏
int main() {
#ifdef DEBUG
printf("Debug mode: This is a debug message.\n");
#endif
printf("This is a normal message.\n");
return 0;
}
上述代码中,定义了 DEBUG
宏。#ifdef DEBUG
会判断 DEBUG
宏是否被定义,如果定义了,就会编译 printf("Debug mode: This is a debug message.\n");
这行代码,所以程序运行时会输出调试信息和正常信息。如果注释掉 #define DEBUG
这一行,DEBUG
宏未定义,那么调试信息就不会被编译和输出。