M=3+5和M=3+(5)的区别是啥

代码向导 课程设计 1

define M 2<3 ? 5:6 void main( ) { int i=3, j, k; j=i+M; k=i+(M); printf ("%d, %d\n", j, k); }

为什么j=6,k=8,(M)有什么特殊含义吗

回复

共2条回复 我来回复
  • 代码项目助手
    这个人很懒,什么都没有留下~
    评论

    (M)保证了三目运算符的优先级 如果没有括号,比如j=i+M的表达式展开是这样的: j=i+2<3?5:6,根据运算符优先级,相当于 j=(i+2)<3?5:6了。 会先运算i+2,等于5,5<3不成立,所以 j=6,而如果是k=i+(M),则先计算三目运算,2<3成立,结果为5,k=3+5=8

    0条评论
  • 毕设向导
    这个人很懒,什么都没有留下~
    评论

    define M 2<3 ? 5:6运行过程是先替换后执行,所以两处调用分别可以变成

    j=i+2<3 ? 5:6; //j=6 k=i+(2<3 ? 5:6);//k=8

    0条评论

发表回复

登录后才能评论