#define SQR(x) x*x 在执行a=++SQR(k+1)时输出结果怎么是9 (其中k=3) c语言中宏定义部分的内容

我想请教为什么最终结果会是9而不是8

为避免出现歧义,C宏定义时必须把所有的变量及整个变量表达式都要分别用圆括号括起来,不然当变量是表达式时展开时就达不到你想要的结果。原因是你没有用括号,展开时把++SQR(k+1)扩展成了++k+1*k+1了。你看,它就等于4+1x4+1=9了……像你这里这样定义就没有问题了:
#define SQR(x) ((x)*(x))
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-07
a=++SQR(k+1) = ++k+1*k+1 = 4+4+1=9追问

谢谢你

追答

为何不采纳?

本回答被提问者和网友采纳
第2个回答  2011-10-29
还是宏展开的问题,改一下你的宏定义:
#define SQR(x) ((x)*(x))