#include<iostream>
using namespace std;
#define MYFUNC(a, b) ((a) < (b) ? (a) : (b))
inline int myfunc(int a, int b)
{
return a < b ? a : b;
}
int main()
{
int a = 1;
int b = 3;
//int c = myfunc(++a, b); // a=2 b=3 c=2
int c = MYFUNC(++a, b); //==>宏替换并展开 ((++a) < (b) ? (++a) : (b)) //a=3 b=3 c=3
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("c = %d\n", c);
system("pause");
return 0;
}
内联函数执行结果
宏替换执行结果
通过了解内联函数的内部机制后,很自然会想到同样是代码的替换,那么内联函数的替换与宏替换的区别是什么?
上面代码形象展示了内联函数替换与宏替换的区别,他们替换在不同的阶段,
宏替换在预编译阶段, 而内联函数作用在编译执行阶段。
通过实验结果发现:
1.内联函数其实就是正常的函数调用的结果。
2. 但是宏替换只是将代码片段机械的进行宏展开。即简单的进行代码文本的替换。
int c = MYFUNC(++a, b) 机械的替换为: ((++a)<(b) ? (++a) : (b) )