#define N 4
#define EXPON(x) x * x * x
#define HALF(x) x * 0.5
int main(){
int i = N + 6;
int j = HALF(i);
int k = EXPON(j + 0);
printf("%d %d %d\n",i, j, k);
}
的j
回报是有点不等于总结的(j+0)
可有人请解释一下吗?调用一个函数,但我不明白的逻辑运算
#define N 4
#define EXPON(x) x * x * x
#define HALF(x) x * 0.5
int main(){
int i = N + 6;
int j = HALF(i);
int k = EXPON(j + 0);
printf("%d %d %d\n",i, j, k);
}
的j
回报是有点不等于总结的(j+0)
可有人请解释一下吗?调用一个函数,但我不明白的逻辑运算
你实际上并没有调用函数,而是使用类似函数的宏。宏执行文本替换,所以扩展此之后:
int k = EXPON(j + 0);
成为这样的:
int k = j + 0 * j + 0 * j + 0;
哪个(由于运算符优先级)是一样的:
int k = j + (0 * j) + (0 * j) + 0;
这是不是你想要什么。
当definining一个函数宏,你应该始终圆括号参数和结果表达式:
#define EXPON(x) ((x) * (x) * (x))
所以,现在你会得到你所期望的:
int k = ((j + 0) * (j + 0) * (j + 0));
这是什么打印?从逻辑上讲,它应该打印“10,5,125”。 –
我猜这是印刷'10,5,5'? – Kupiakos
@ Kupiakos哦。这就说得通了。他把自己的宏观定义得很差。 –