美文网首页
C/C++的 Undefined Behavior

C/C++的 Undefined Behavior

作者: AwesomeAshe | 来源:发表于2017-03-30 15:47 被阅读50次

    今天写了个程序

    #include<stdio.h>
    
    int max(int a,int b)
    {
        
        if(a>b)
        {
            //printf("In func max():%d %d \n",a,b);
            return a;
        }
        else {
            //printf("In func max():%d %d \n",a,b);
            return b;
        }
        
    }
    void jubu_test(void)
    {
        int a=1;
        int b=2;    
        printf("maxab()=%d after max: a=%d b=%d \n",max(a++,b++),a,b);  //a=2,b=3
    }
    int c=2;
    int d=1;
    void quanju_test(void)
    {
        printf("maxcd()=%d  c=%d d=%d \n",max(c++,d++),c,d);    //c=2,d=1
        c=2;
        d=1;
        int f=max(c++,d++);
        printf("maxcd()=%d after max: c=%d d=%d \n",f,c,d);     //c=3,d=2
    }   
    int main(int argc, char** argv)
    {
        jubu_test();
        quanju_test();
    }
    

    问题是,为什么 quanju_test 函数里面两个printf 打印的结果不一样?我一直以为是 全局变量的问题或者是pritntf的问题,直到我上 stackoverflow搜了一下,发现我竟然不知道
    ++ 运算符使用不当会造成 “”未定义的行为“”

    比如这个语句的执行结果:

       int a[] = {1, 2, 3};
       int * pa; 
    
       pa = &a[0];
       printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa), *(pa++),*(++pa));
       /* Result: a[0] = 3  a[1] = 2    a[2] = 2 */
    

    我试了一下就蒙蔽了2333

    有人解释:

    function parameters are not evaluated in a defined order in C.

    这是事实。。

    相关文章

      网友评论

          本文标题:C/C++的 Undefined Behavior

          本文链接:https://www.haomeiwen.com/subject/ovcpottx.html