关于C语言c = (b=a+2) - (a=2); 的错误

问题描述:

关于C语言c = (b=a+2) - (a=2); 的错误
a=5;
c = (b=a+2) - (a=2);
括号中的b=a+2 和 a=2 同时运行的 所以系统不知道a=5还是a=2 因此产生了错误
1个回答 分类:综合 2014-10-16

问题解答:

我来补答
不是,该式没有任何错误,该式是从左往右执行的,最后c的值为5
再问: 我在网上大学的老师说的 你帮忙看一下:
c = (b = a+2) - (a=2);有两个时间点p1和p2本例中,(a=2)的副作用在p1和p2之间是不确定的。然后,标准有这么一段,第二条规则说时间点p1(旧值)只能被用作计算新值。(b=a+2)中b的新值是由a来确定的,而a所指定的值是p1前的值还是新值是不确定的。另应写做 c = (b = a+2, a=2, b-a);
再答: (b=a+2)中b的新值是确实由a来确定的而a所指定的值是p1前的值还是新值是不确定的,应该是指 c = (b = a+2) - (a=2);的执行顺序和编译器有关,因此a的值不确定
但是不能说这条语句有错,顶多是算作有歧义,因为它能够编译通过,并且运行出结果下面为运行结果的截图,在VS2010中是从左往右执行的,你可以参考一下:
 
 
展开全文阅读
剩余:2000