A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 斑马 于 2014-6-6 12:25 编辑
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int b;
  5.     int a=5;
  6.     b = (++a) + (a++);
  7.     printf("b=%d,a=%d\n",b,a);
  8.     return 0;
  9. }
复制代码

信息图像(2103778729)副本.png (6.84 KB, 下载次数: 44)

信息图像(2103778729)副本.png

评分

参与人数 1技术分 +1 收起 理由
wanzhu159 + 1

查看全部评分

9 个回复

倒序浏览
这些在C标准中并没有严格定义,是由编译器决定的。不同的编译器有不同的结果,我估计是此编译器不允许在一个运算式子中两次改变同一个变量的值!
回复 使用道具 举报
Guardian_Angel 发表于 2014-5-28 06:26
这些在C标准中并没有严格定义,是由编译器决定的。不同的编译器有不同的结果,我估计是此编译器不允许在一 ...

谢谢解答,那么有效的解决办法是什么呢?换编译器吗?我现在用的Xcode是5.11,编译器应该是LLVM吧。。
回复 使用道具 举报
不是个警告吗?运行不报错就可以了吧!
回复 使用道具 举报 1 0

其实这样写,不同的编译器处理是不同的,但是基本上应该是从表达式的右边一直往左结合计算,先算a++表达式值为5,a为6,之后算++a,此时应该是7,算出来结果是5+7=12
回复 使用道具 举报
xiaodixing 发表于 2014-5-28 15:53
其实这样写,不同的编译器处理是不同的,但是基本上应该是从表达式的右边一直往左结合计算,先算a++表达式 ...

谢谢解答!
运算结果我是知道的,就是不知道为什么会报错,如果是编译器问题,现在不都是LLVM的clang吗?
回复 使用道具 举报
斑马 中级黑马 2014-5-28 20:41:46
7#
xiaodixing 发表于 2014-5-28 15:53
其实这样写,不同的编译器处理是不同的,但是基本上应该是从表达式的右边一直往左结合计算,先算a++表达式 ...

你好,刚开始我还没注意,运算顺序是从右往左吗?
我之前算的是从左往右,先算++a,再算a++,结果是b=6+6,a=7
回复 使用道具 举报
斑马 中级黑马 2014-5-28 20:44:17
8#
xiaodixing 发表于 2014-5-28 15:53
其实这样写,不同的编译器处理是不同的,但是基本上应该是从表达式的右边一直往左结合计算,先算a++表达式 ...

可参考,这个帖子http://bbs.itheima.com/thread-118630-2-1.html
回复 使用道具 举报
只是个警告而已,可以忽略
回复 使用道具 举报
你这个是警告,有编译器自动产生的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马