宏定义在编译阶段被纯文本替换,因此使用宏定义函数时要特别注意优先级问题。
#include<iostream>
using namespace std;
#define DIV(x) x/x
int main(){
int a = 12, k = 3, m = 1;
a /= DIV(k + m) / DIV(k + m);
printf("%d, %d\n", DIV(k + m) / DIV(k + m), a);
system("pause");
return 0;
}
上述代码运行结果为:4,3
原因在于DIV(k + m)/DIV(k+m)被替换为k+m/k+m/k+m/k+m。