不同。
虽然功能近似,但函数会产生独立代码,每次调用执行的是同一个位置的代码,无论调用多少次。
宏定义是简单的文本替换,产生的代码是替换后程序产生的代码,简单说就是程序里每次使用宏替换后的地方都要产生类似的代码,而这些替换后产生的代码存在于程序的不同位置。
宏定义不检查参数类型,仅仅是简单的文本替换
#define a(x,y) x>y?x*y:x+y
和
int a(x,y)
{
return(x+y);
}
a(x+y,x*y)这个表达式对于以上两种定义的得到的结果是不一样的
而且,宏有宏的有点,函数有函数的优点
函数的优点就是占用存储空间少,缺点是每次调用函数都要调用中断程序,影响运行效率
宏的优点就是直接宏展开,每次调用都要展开,所以比较占存储空间,但是相应的就不用调用中断程序了,运行效率自然就高了