美文网首页
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