这是一个普通的C程序,我在一些题库中发现的。如下图所示:
#define CUBE(p) p*p*p
main()
{
int k;
k = 27 / CUBE(3);
printf("%d", k);
}根据我的理解和知识,K的值应该是1,因为在预处理过程中,CUBE(3)会被3*3*3替换,在随后的编译之后,它会给出1的值,但它显示的值是81,这让我很好奇它是如何发生的。
对于上面这个问题,谁能证明81的答案是正确的?
发布于 2010-01-22 13:01:25
预处理器应该正确地用括号括起来。将其替换为
#define CUBE(p) ((p)*(p)*(p))然后你看。
发布于 2010-01-22 13:00:50
预处理器仅替换为
CUBE(3)使用
3*3*3所以你最终会得到:
k=27/3*3*3从左到右按运算符优先级计算,实际上是81。
如果在宏两边添加括号,您会发现结果是正确的:
#define CUBE(p) (p*p*p)更好的做法是用括号将每个p实例括起来,如:
#define CUBE(p) ((p)*(p)*(p))这将允许您将表达式正确地传递给宏(例如,1 + 2)。
发布于 2010-01-22 13:07:39
由于运算符优先级而导致的 27/3*3*3 = 81
您可以使用:
inline int cube(int p) { return p*p*p; }https://stackoverflow.com/questions/2115095
复制相似问题