C语言学习总结:宏和函数

函数是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));

猜你喜欢

转载自blog.csdn.net/baidu_40931662/article/details/80469247