【发布时间】:2017-08-03 01:37:31
【问题描述】:
为什么我得到的答案是“奇数”而不是“偶数”?
#include<stdio.h>
#define ODD(x) x%2?0:1
int main()
{
int a=5;
if(ODD(a+1))
printf("even");
else
printf("odd");
return 0;
}
【问题讨论】:
-
虽然在这种情况下这无关紧要,因为
%和+的优先级高于?,但在使用宏的参数时应始终将它们括在括号中。请参阅此答案以了解原因:stackoverflow.com/a/29248016/1212725 -
@bruceg
%具有比+更高的优先级确实,这使得x%2?0:1与ODD(a+1)存在问题 -
如果宏应该在偶数时返回 true,为什么还要调用
ODD? -
@AjayBrahmakshatriya OP 的输出肯定反映了
a的奇数/偶数。使用a+1,将反转文本输出。这是宏参数中()值的练习。 -
@chux 你是对的。 % 在 + 之前应用,这就是为什么你总是将宏的参数括在括号中!!!
标签: c