内联函数的出现就是为了避免宏参替换引起的问题
相信你知道宏参替换会引起什么问题吧.
#define m(x,y) (((x)>(y))?(x):(y))
执行如下代码
m(x++,y)
如果x>y x会被递增两次
如果x<=y x会被递增一次
很明显这不是我们想要的结果
*宏的声明没有函数的定义灵活
首先宏需要大量的括号来确保正确的结合.
如果你想使用一些小巧的算法,代码中需要诸如循环,变量,等等复杂的语法,
这时候宏就力不从心了
你可以想象一下这个过程。
宏名称为m(x)
你想要算x的阶乘
其中会涉及到循环等等复杂语法。
如此调用:
long a=m(4);
然后一大段循环语句被替换到=后面。程序挂了。
*其次宏名没有进入符号列表,比如上面那个宏
如果出错会提示(((xxx)>(xxx))?(xxx):(xxx))中有错误
但是对于大型程序你很难记住上述代码是哪一个宏产生的
于是你就难以在代码中找到错误。
*再次内联函数拥有自动类型转换的优势.
总之内联是非常有必要的.
你可以使用内联函数和const变量 完成宏的功能。
但是却不能使用宏来完成内联的功能。
温馨提示:答案为网友推荐,仅供参考