搜索
查看: 602|回复: 9
打印 上一主题 下一主题

看不出来函数调用中的求值顺序

[复制链接]
跳转到指定楼层
楼主
发表于 2017-12-4 22:22:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
在课本中给的方法如下
#include<stdio.h>
void main()
{
        int i = 8;
        printf("%d,%d,%d,%d\n", ++i, --i, i++, i--);
        system("pause");
        return 0;
}
//从右到左执行则结果为8,7,7,8
//从左到右执行则结果为9,8,8,9

但是用啊哈C于VS2017求出来的结果都为8,8,7,8
这顺序看不出来...

最佳答案

查看完整内容

未定义行为 编译器有权决定执行的顺序 刚好啊哈 C 和 VS 决定的顺序一样而已
沙发
发表于 2017-12-4 22:22:30 | 只看该作者
未定义行为
编译器有权决定执行的顺序
刚好啊哈 C 和 VS 决定的顺序一样而已
板凳
 楼主| 发表于 2017-12-4 22:35:47 | 只看该作者
4399APPLE 发表于 2017-12-4 22:25
未定义行为
编译器有权决定执行的顺序
刚好啊哈 C 和 VS 决定的顺序一样而已

但这完全看不出顺序,难不成是乱序( ̄_ ̄|||)
地板
发表于 2017-12-5 12:04:43 | 只看该作者
AACZY 发表于 2017-12-4 22:35
但这完全看不出顺序,难不成是乱序( ̄_ ̄|||)

是的
没有任何办法知道是什么顺序
5#
 楼主| 发表于 2017-12-5 15:57:26 | 只看该作者
那有方法使编译器的行为定义下来吗?
6#
 楼主| 发表于 2017-12-5 16:40:34 | 只看该作者
4399APPLE 发表于 2017-12-5 12:04
是的
没有任何办法知道是什么顺序

#include<stdio.h>
void main()
{
        int i,j;
        for (j = 1; j <= 2; ) {
                i = 8;
                printf("%d,%d,%d,%d\n", ++i, --i, i++, i--);
                system("pause");
        }
        system("pause");
        return 0;
}
//从右到左执行则结果为8,7,7,8
//从左到右执行则结果为9,8,8,9
改了下代码,都是8878,编译器只判断一次吗?
而且发现,ahac与VS2017的运行界面好像啊,是不是同一个

4.PNG (101.91 KB, 下载次数: 18)

4.PNG

5.PNG (42.76 KB, 下载次数: 18)

5.PNG

点评

都是 cmd 罢了!  发表于 2018-1-28 20:13
7#
发表于 2017-12-5 18:08:26 | 只看该作者
AACZY 发表于 2017-12-5 15:57
那有方法使编译器的行为定义下来吗?

我们没有任何办法确定这个顺序
8#
发表于 2017-12-5 18:08:47 | 只看该作者
AACZY 发表于 2017-12-5 16:40
#include
void main()
{

我们也不知道编译器到底是怎么处理的
9#
发表于 2017-12-9 16:10:29 | 只看该作者
换一个方式
写成四句printf,一句输出一个
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表