函数是C语言中一个重要的部分,相信大部分的人都有所了解。那么我就来介绍宏。
宏:#define机制包括了一个规定,允许把参数替换到文本中,这种现象通常称为宏(macro)或定义宏(define macro)。
下面是宏的声明方式:
#define name( parament-list ) stuff
其中的parament-list是一个由逗号隔开的符号表,他们可能出现在stuff中。
注意:参数列表的左括号必须与name相邻。
如果两者之间由任何空白,参数列表就会被解释为stuff的一部分。
宏和函数的对比
1.宏不关心数据类型,宏做的只是简单的字符串的替换,而函数是参数的传递,参数有数据类型。
2.宏的参数替换是直接替换的,不做任何计算,而函数调用是将实参的值(经过计算)传给形参。
3.宏在预编译阶段被替换,而函数是在编译之后被调用。
4.宏不能定位,而函数可以。
5.宏不能调试,而函数可以。
6.宏不占用内存空间,只做字符串的替换,而函数占用内存,因为函数调用是参数间的传递。
7.宏没有返回值,直接执行,效率较高,而函数调用既要保存现场,又要跳转到另一个函数调用中去执行,然后还要返回,所以效率较低。
8.宏每次执行时,都有一份宏定义的代码插入到程序中,代码过长,浪费空间,而函数执行只需一份,节省空间。
9.宏可能会带来运算符优先级的问题,导致程序容易出错,而函数不会。
10.宏参数可以传递类型,而函数不可以。
举个例子:
#define MALLOC(num,type)\
(type *)malloc(num * sizeof(type))
...
//使用
MALLOC(10,int);//类型作为参数
//预处理替换之后
(int *)malloc(10 * sizeof(int));