C/C++的 Undefined Behavior

今天写了个程序

#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.

这是事实。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 元数据是描述数据仓库内数据的结构和建立方法的数据。可将其按用途的不同分为两类,技术元数据和商业元数据。 技术元数据...
    whybask阅读 1,300评论 0 1
  • 安卓5.3.3,网易新闻APP功能分析
    linchanglin阅读 968评论 0 2
  • 2016年6月24日琴心祝福……“善待好自己…”.....善待自己很重要、它不同于放纵自己……善待自己是一个尊重,...
    兆宇侃世界阅读 244评论 0 0

友情链接更多精彩内容