黑马程序员技术交流社区

标题: C语言里一个最常见的错误 [打印本页]

作者: TLTY    时间: 2014-6-28 17:10
标题: C语言里一个最常见的错误
void main()
{
int a=1,b=2,c=3,d=4;
printf("%d,%d,%d,%d",a+=b,a,d,d+=c);
getch();
}
编译结果是:3,1,7,7.
注:输出语句和子函数的实际参数值顺序是是从右到左的
作者: fantacyleo    时间: 2014-6-28 17:43
不对,这个顺序是没有保证的。c标准写得很清楚:The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified
作者: TLTY    时间: 2014-6-28 18:40
fantacyleo 发表于 2014-6-28 17:43
不对,这个顺序是没有保证的。c标准写得很清楚:The order of evaluation of the function designator, the ...

额,能用汉语吗,我英文不好,这是我在博客和书上看到的
作者: fantacyleo    时间: 2014-6-28 20:29
TLTY 发表于 2014-6-28 18:40
额,能用汉语吗,我英文不好,这是我在博客和书上看到的

就是说一个函数带多个参数的,到底先对哪一个参数求值,c标准并没有规定这个顺序。这个例子中,是先计算a+=b还是先计算a,不同编译器可能有相同的做法,也可能不同,应该避免这样的写法
作者: 李斌007    时间: 2014-6-29 09:22
恩 。。。。。。。
作者: TLTY    时间: 2014-6-29 14:12
fantacyleo 发表于 2014-6-28 20:29
就是说一个函数带多个参数的,到底先对哪一个参数求值,c标准并没有规定这个顺序。这个例子中,是先计算a ...

哦,谢谢啊
作者: libra    时间: 2014-6-29 15:36
学习了~~
作者: zhs    时间: 2014-6-30 06:59
printf输出多个参数时
求值顺序虽是自右至左,但是输出顺序还是从左至右




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