宏函数和函数的区别及其优缺点

宏定义,编译预处理指令,在编译预处理时即进行简单的字符替换,也只进行简单的字符替换。而宏定义的函数和用户定义的函数在使用时有什么区别?如下:

1.宏函数会在编译预处理时展开,只占编译时间,函数调用则会占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏会较慢。

2.在函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。

3.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。

4.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。

5.宏函数的定义也有其缺点,它很容易会产生二义性,具体如下:

----------------------------------下在这边↓-------------------------------------

宏函数和函数的区别及其优缺点

我们程序的原意是求(2+2)*(3+3),结果为24,用函数执行得到了正确的结果。

而如果用宏函数进行运算:

宏函数和函数的区别及其优缺点

宏函数只进行了简单的字符替换,它将程序错误的展开成了2+2*3+3=11,因为运算顺序的原因得到了错误的结果。