宏定义:
define 机制中包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或宏定义。
语法: #define name stuff
举个例子:
define MAX 100
define reg register
define CASE break;case (不建议此写法)
宏的声明方式:#define name(参数列表) stuff
注意:参数列表的左括号必须和name紧邻
下面讲一个例子。。。
#define SQUARE(x) x*x
int main()
{
int a=5;
printf("%d\n",SQUARE(5)); //结果为25
printf("%d\n",SQUARE(5+1)); //结果为5+1*5+1=11
}
以上体现了完全替换的效果,因此在使用宏定义时,应注意常加括号
#define替换
在程序中扩展#define定义符号和宏时,需要涉及以下步骤:
1.在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号,如果是,它们首先被替换
2.替换后插入程序中原来的位置。
注意:对于宏,不能出现递归;当预处理器搜索#define定义的符号时,字符串常量的内容不被搜索
宏和函数的区别
1.效率
使用宏效率更高,预处理阶段直接替换
调用函数和从函数返回需要更多的时间
2.参数类型
宏的参数可以出现类型,但是函数不可以
3.代码长度
使用宏时,宏代码都会被插入程序中,代码长度增加
函数只出现在一个地方,每次使用函数时都调用同一份代码
4.操作符优先级
宏参数求值时是在所有周围表达式的上下文环境中,由于操作符的优先级有可能造成不可预测的结果
函数只在被调用时求值一次,更容易预测