none
debug和release的区别 RRS feed

  • 问题

  • void OutPrint(int x,int y,int z)
    {
    Trace("x=%d,y=%d,z=%d\n",x,y,z);
    }
    int i;
    i = 0; OutPrint(i++,i,i);
    i = 0; OutPrint(i,i++,i);
    i = 0; OutPrint(i,i,i++);

    i = 0; OutPrint(++i,i,i);
    i = 0; OutPrint(i,++i,i);
    i = 0; OutPrint(i,i,++i);
    结果在debug下和release下不一样,但是有一定的规律,我的能力无法从底层来解释这个问题,希望老师能从深层阐述这个问题,并且能告诉我这种问题如果在大型程序中可能导致一些什么问题呢。如果要能透彻类似的这些问题,我应该看些什么资料。请老师从各个角度帮忙解释下
    2011年12月5日 14:18

答案

  • void OutPrint(int x,int y,int z)
    {
    Trace("x=%d,y=%d,z=%d\n",x,y,z);
    }
    int i;
    i = 0; OutPrint(i++,i,i);
    i = 0; OutPrint(i,i++,i);
    i = 0; OutPrint(i,i,i++);

    i = 0; OutPrint(++i,i,i);
    i = 0; OutPrint(i,++i,i);
    i = 0; OutPrint(i,i,++i);
    结果在debug下和release下不一样,但是有一定的规律,我的能力无法从底层来解释这个问题,希望老师能从深层阐述这个问题,并且能告诉我这种问题如果在大型程序中可能导致一些什么问题呢。如果要能透彻类似的这些问题,我应该看些什么资料。请老师从各个角度帮忙解释下


    函数在计算参数的时候,和逗号表达式不一致。

    他们的计算顺序是没有定义的。


    我也有自己的签名档哦!
    2011年12月6日 1:30

全部回复

  • 经测试,完全一致,检查你程序其他地方的问题

    VC8.0, VC9.0和MINGW-GCC编译器都是正常的

    这么基础的问题,编译器是不可能错的,你可以去了解下编译器是怎么测试的


    0xBAADF00D
    2011年12月5日 16:04
    版主
  • 我用的是vs2008编译器,问题的确存在
    2011年12月6日 1:12
  • void OutPrint(int x,int y,int z)
    {
    Trace("x=%d,y=%d,z=%d\n",x,y,z);
    }
    int i;
    i = 0; OutPrint(i++,i,i);
    i = 0; OutPrint(i,i++,i);
    i = 0; OutPrint(i,i,i++);

    i = 0; OutPrint(++i,i,i);
    i = 0; OutPrint(i,++i,i);
    i = 0; OutPrint(i,i,++i);
    结果在debug下和release下不一样,但是有一定的规律,我的能力无法从底层来解释这个问题,希望老师能从深层阐述这个问题,并且能告诉我这种问题如果在大型程序中可能导致一些什么问题呢。如果要能透彻类似的这些问题,我应该看些什么资料。请老师从各个角度帮忙解释下


    函数在计算参数的时候,和逗号表达式不一致。

    他们的计算顺序是没有定义的。


    我也有自己的签名档哦!
    2011年12月6日 1:30
  • debug;                                release
    0,1,1;                                  0,0,0;
    1,0,1;                                  0,0,0;
    1,1,0;                                   0,0,0;
    1,1,1;                                  1,1,1;
    1,1,1;                                  1,1,1;
    1,1,1;                                  1,1,1;
    我可不可以理解,在debug下优先运算i++.在release下优先运算函数呢。谢谢烟雨江山和版主得答案
    2011年12月6日 2:00