取消宏定义
#undef指令用于取消宏定义。在#define定义了一个宏之后,可以使用#undef取消该宏定义,如果预处理器在编译源代码时,发现#undef指令,那么#undef后面这个宏就会被取消,无法生效了。
#undef取消宏定义的语法格式如下:
#undef 宏名称
接下来通过一个案例演示#undef指令的使用,如例1所示。
例1 undef.c
1 #include <stdio.h>
2 #define PI 3.14 //定义宏PI
3 int main()
4 {
5 printf("%f\n", PI); //引用宏PI
6 #undef PI //取消宏PI
7 printf("%f\n", PI); //再次引用宏PI
8 return 0;
9 }
运行例1,程序报错,如图1所示。
图1 例1运行结果
从图1中可以看出,程序报出“未定义的标识符PI”的错误。这是因为在例1中,第2行代码定义了宏PI,第6行中使用#undef指令取消宏PI,此时,第7行代码使用宏PI时,宏PI已经不存在了,所以程序编译出错。
多学一招:预定义宏
stdio.h标准库定义了五个关于源程序编译信息的宏,利用这些宏可以轻松获得程序运行信息,有助于编程人员进行程序调试。这五个预定义宏的名称及含义如表1所示。
表1 stdio.h标准库关于源程序编译信息的五个预定义宏
预定义宏 | 说明 |
---|---|
DATE | 定义源文件编译日期的宏 |
FILE | 定义源代码文件名的宏 |
LINE | 定义源代码中行号的宏 |
TIME | 定义源文件编译时间的宏 |
FUNCTION | 定义当前所在函数名的宏 |