宏和函数的区别:
1.宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型。
2.宏的参数替换是不经过计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自热是经过计算得来的。
3.宏在编译之前进行,即先用宏替换宏名,然后再编译的,而函数显然是编译之后,在执行时才调用的。因此,宏占用的是编译的时间,而函数占用的是执行时的时间。
4.宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的。
5.函数的调用是需要付出一定的时空开销的,因为系统在调用函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时才恢复现场,这些操作,显然是宏中没有的。
内联函数和宏的区别:
1.内联函数在运行时可调用,而宏定义不可以;
2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;
3.内联函数可以访问类的成员变量,而宏定义则不能;
4.在类中声明同时定义成员函数,自动转化为内联函数。