开发者社区> 问答> 正文

关于C语言源代码如何运行问题? 400 报错

关于C语言源代码如何运行问题? 400 报错

我是一个初学者,问下a=1;

                            printf("%d%d%d",a++,a++,a++);

请求解析

展开
收起
爱吃鱼的程序员 2020-06-04 15:21:55 559 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    这个结果跟编译器的运算优先级有关,不同平台编译器可能能不一样,

    GCC 4.8 的运算顺序是 从右到左 所以会输出 321

    ######这种代码是有歧义的,GCC结果是 3 2 1,clang的结果是 1 2 3,Visual C/C++ 111,你再加一句
    printf("%d",a);

    结果是4。

    这是编译器处理方式的差异,参数处理的顺序不一样 优先级不一样,这种代码应该要少用或者不用。



    ######谢谢######围观,应当要看编译原理相关知识 。######不解释,不接受,不深入,仅了解~######

    引用来自“KB325688”的评论

    这个结果跟编译器的运算优先级有关,不同平台编译器可能能不一样,

    GCC 4.8 的运算顺序是 从右到左 所以会输出 321

    我认为这个是因为printf函数入栈是从后往前的方式的,所以编译器先计算最后一个a++ ,所以结果是321.######

    引用来自“大刕”的评论

    不解释,不接受,不深入,仅了解~
    哈,支持。搞c,搞这些不确定,但可通过其他方式确定的研究,是无聊的。不可通过其他方式进行确定的,还有点研究头,以防止不确定的情况发生。。。######一样初学c,顶一下######

    类似的问题,前些阵子我也问过,可以看这里http://www.oschina.net/question/562215_173831

    不过最好先不要理会设我的最佳答案,最好看一下@PYPlus 的回答。

    另外,推荐看一下《C与指针》的5.4.4节,即优先级和求值的顺序。

    ######运算顺序问题,虽然我用手机打字,但是我已经知道答案,3,2,1######

    C程序设计语言(第2版) 2.12 运算符优先级与求值次序

    类似地,C语言也没有指定函数各参数的求值顺序。因此,下列语句

    printf("%d %d\n", ++n, power(2, n));

    在不同的编译器中可能会产生不同的结果,......

    2020-06-04 16:07:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载