黑马程序员技术交流社区

标题: 在Xcode上写的一个关于自加运算的小程序,报错了 [打印本页]

作者: 斑马    时间: 2014-5-28 00:33
标题: 在Xcode上写的一个关于自加运算的小程序,报错了
本帖最后由 斑马 于 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, 下载次数: 41)

信息图像(2103778729)副本.png

作者: Guardian_Angel    时间: 2014-5-28 06:26
这些在C标准中并没有严格定义,是由编译器决定的。不同的编译器有不同的结果,我估计是此编译器不允许在一个运算式子中两次改变同一个变量的值!
作者: 斑马    时间: 2014-5-28 10:02
Guardian_Angel 发表于 2014-5-28 06:26
这些在C标准中并没有严格定义,是由编译器决定的。不同的编译器有不同的结果,我估计是此编译器不允许在一 ...

谢谢解答,那么有效的解决办法是什么呢?换编译器吗?我现在用的Xcode是5.11,编译器应该是LLVM吧。。
作者: ⒈心只霸占沵    时间: 2014-5-28 12:29
不是个警告吗?运行不报错就可以了吧!
作者: xiaodixing    时间: 2014-5-28 15:53

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

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

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

可参考,这个帖子http://bbs.itheima.com/thread-118630-2-1.html
作者: tony_ygz    时间: 2014-6-1 08:37
只是个警告而已,可以忽略
作者: 魑魅魍魉121    时间: 2014-6-6 09:27
你这个是警告,有编译器自动产生的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2