#define 是C语言中的宏定义命令,在一定程度上提高程序的运行效率。它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
在一个程序中,允许使用任意数量的#include命令行
#include命令行可以出现在程序文件的中间
在包含文件中,可以再包含其他文件
当包含文件被修改了,包含该文件的源程序需要重新进行编译和连接
该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。
1) 简单的宏定义:用指定的的标识符(宏名)代表一串字符。
#define <宏名> <字符串>
- 宏名的有效范围为该宏定义命令之后至本源文件结束。宏定义命令一般写在文件开头或函数之前。
- 可以用 #undef 命令终止宏定义的作用域。
- 进行宏定义时,可以引用已定义的宏名,层层置换。
- 对程序中用双引号括起来的字符串,即使与宏名相同,也不会置换。
2) 带参数的宏定义:
#define <宏名>(<参数表>) <宏体>
注意:宏体应包含参数表中的参数
预处理
“编译预处理” 是 C 与其他高级语言的一个重要区别。他们主要是:
- 宏定义
- 文件包括
- 条件编译
宏定义
1.宏定义不检查参数正确性,会有安全隐患
宏的嵌套定义过多会影响程序的可读性,而且很容易出错
2.相对于函数调用,宏定义可以提高程序的运行效率
3.const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。
4.使用const比使用define有一下几种好处:
(1)const会进行数据类型检查,而define不会
(2)const效率高,因为const定义的常量,没有在内存中存储,而是在符号表中,每次访问这个数据的时候,少了从内存中读取和存储过程,效率高。
因此尽量还是使用const常量
文件包括
用 #include 命令实现一个文件包含另一个文件。
语句形式: #include “文件名”
条件编译
语句形式:
-
#ifdef 宏名
程序段1
[#else
程序段2]
#endif -
#ifndef 宏名
程序段1
[#else
程序段2]
#endif -
#if 宏名
程序段1
[#else
程序段2]
#endif -
#if 宏名
程序段1
#elif 表达式2
程序段2
#else
程序段3
#endif