搜索
查看: 934|回复: 10
打印 上一主题 下一主题

初学者求助!有个代码用啊哈C和VC++6.0编译出来结果不一样!

[复制链接]
楼主
发表于 2016-7-9 20:40:02 | 显示全部楼层
邀请码 发表于 2015-12-27 14:29
参见c++11和c11函数调用入栈的规定。

问题是这是C89模式啊
沙发
发表于 2016-7-9 20:42:54 | 显示全部楼层
本帖最后由 初学C 于 2016-7-9 20:58 编辑

初始代码:
[mw_shl_code=c,true]#include<stdio.h>
#include <stdlib.h>
main()
{
    int a=3,b=4;
    printf("%d,%d,%d",a+=7,a,a+=4,++a);
    system("pause");
}[/mw_shl_code]因为
a+=7,a+=4,++a
在一定(不是全部!)程度上,等价于:
a=a+7;
a=a+4;
a=a+1;
而printf函数会先将后面的值计算出来!,于是这个程序
相当于:
[mw_shl_code=c,true]#include<stdio.h>
#include <stdlib.h>
main()
{
    int a=3,b=4;
    a=a+7;
    a=a+4;
    a=a+1;
    printf("%d,%d,%d",a,a,a,a);
    system("pause");
}[/mw_shl_code]又因为a+=7之类的又是赋值语句,所以,a的值也随之改变、
最好的测试方法是看一看a的值是不是真的被改变了.
于是,我写出了下列代码测试:
[mw_shl_code=c,true]#include<stdio.h>
#include <stdlib.h>
main()
{
    int a = 0;
        printf("最开始:%d\n",a);
        printf("执行+=语句中:%d\n",a+=1);
        printf("最后:%d\n",a);
    system("pause");
    return 0;
}[/mw_shl_code]
测试结果:


可以发现,a的值已经被改变.
所以,不难得出,因为printf += ++这些赋值语句改变了a的值
所以,a最后的值就是:15

你的啊哈C应该是开启了C99模式(C99标准编译),但是VC6是C89(C89标准编译)
编译的标准不同,结果自然不一样!



板凳
发表于 2016-7-9 20:59:02 | 显示全部楼层
楼上难道这么简单的知识都不知道?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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