c语言关于宏定义的问题

有的大神知道这个是什么意思吗
#define abs(x) (x)>0? (x):-(x)
我以为是求绝对值的函数,但是不对,因为
if(6<abs(5-2))
cout<<"winwin"<<endl;
无论是大于号,小于号,还是等号,他都会输出winwin,这是为什么呀

表达式: (真)?(假)

#define abs(x) ((x)>0? (x):-(x))
try this one

这是绝对值

不过你需要修改一下你的判断公式 if (6 < (abs(5-2)))

宏定义在程序预处理的时候只是把你的宏展开,而按照你的代码

if(6 0 ? (5-2) : -(5-2) ),关系运算符> < 的优先级都会比三目运算符 ? :高,所以这个表达式的结果无非就是3或者-3
,放在if里面这个逻辑值总是真的,所以会一直输出winwin,所以你需要对if条件表达式中的运算顺序进行约束,加括号或者直接不用宏定义,改成函数
更好,宏定义容易引起副作用