小呀小菜鸡
2016-06-06 12:43
采纳率: 85.7%
浏览 1.4k
已采纳

c语言关于宏定义的问题

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • u013353880 2016-06-06 12:50
    已采纳

    表达式: (真)?(假)

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dingzhihui123 2016-06-06 12:54

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

    评论
    解决 无用
    打赏 举报
  • lovexeagle 2016-06-06 12:57

    这是绝对值

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

    评论
    解决 无用
    打赏 举报
  • 大城市小葫芦 2016-06-06 15:22

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

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题