c语言中宏替换时先求出实参表达式的值,然后再带入形参中运算求值,对不对啊?为什么啊?

求高手解答啊!!!

不是这样的,宏替换是在预编译时将整个宏的表达式进行替换再进行编译的,举个例子讲如果你定义了如下宏:
#define fun(a) (a*a)
下面用的时候
int main()
{
int i = 5, j = 4;
int k = fun(i+j)
}
那么在预编译时首选会先将fun(i+j)替换成 i+j*i+j,即此时计算的时候会先算乘法i*j,那么k的值最终就是5+4*5+4 = 29,而不是(i+j)*(i+j)=81,当然如果你想实现后一种结果,则宏定义方法应该是下面这样的
#define fun(a) ((a)*(a))

相互学习,希望对你有帮助,不懂的话,再跟我讨论吧追问

明白了,谢谢啊!!!真是高手啊

追答

呵呵,相互学习

温馨提示:答案为网友推荐,仅供参考
相似回答