C程序在VC++6下编译出现结果让人难以理解!!

下面的代码在VC++6环境下运行结果无法让人理解!#include<stdio.h>#include<stdlib.h>#include<iostream.h>intma... 下面的代码在VC++6 环境下运行结果无法让人理解!
#include <stdio.h>#include <stdlib.h>#include <iostream.h>
int main(){ int m,n=2; m=(++n)+(++n)+(++n)+(++n); cout<<m<<'\n'; cout<<n<<endl; return 0;}
跟踪发现尽然是这样的,编译器是怎么回事?

但在TC2.0中运行正确:m=24
在vC2010中运行也正确
展开
 我来答
风姿双鱼
2015-01-29 · TA获得超过1850个赞
知道小有建树答主
回答量:1725
采纳率:0%
帮助的人:648万
展开全部
因为你在VC下编写的程序用到了VC的函数库,比如socket这个套接口函数在VC中的头文件时WinSock.h 而到了Linux系统下的编辑器g++中 就是netinet/in.h了 当然不会通过编译。而且VC编译器把你得程序生成目标文件 连接函数库这些过程都给你做好了。但是在别的编辑器下 比如g++这些都要你自己来写makefile文件来完成。
爱丫丫51
2015-01-29
知道答主
回答量:1
采纳率:0%
帮助的人:1282
展开全部
我刚学C++,谢谢,你给的VC++6的下载地址!我觉得是不是微软编译器版本的问题,看来还是要用 VC2010版本好。好多分啊,能不能给我啊?开玩笑的啦!
追问
是版本的问题,从反编译的汇编代码可以看出来!不用谢,应该的,如果没有满意的答案,就给你,呵呵!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自宝田寺年轻的鸢尾花
2015-01-28 · TA获得超过194个赞
知道小有建树答主
回答量:398
采纳率:0%
帮助的人:155万
展开全部
给一下我的解释吧,首先函数内申明int m,n=2;是不合适的,分开写,因为这时候m的值不是2,你可以debug看一下就明白了。
其次,由于++的优先级高于+, 所以在做+之前所有的++n都已经提前运算了,所以m的值是m=6+6+6+6等于24,这是vs2010的结果,至于19,不是太明白,要是18倒是能接受,也许就是旧编译器的算法问题。
追问
我试了,在vc2010中运行正确的,但VC6怎么回事,怎么这么弱智的编译器都有呢?是不是可以在哪里设置一下!
追答
6.0的编译器我看过一篇文章,提示有好多限制的,就是要你写代码的时候要写得很清楚的,像这种情况的就不能这样写了,当然后来的编译器已经解决这个问题了,所以6.0被淘汰了。当然一般写代码的时候也不会这么写了,这样写会被骂的,只有面试的时候拿来装逼用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
推荐于2016-06-29 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6574万
展开全部

VC++6.0下是如下操作的:

  1. 先把第一、二个表达式加起来存储在m中(也可存储在一个临时变量a中),m=++n+ ++n=4+4=8;

  2. 第三个n增1加在m上,m=m+5=8+5=13;

  3. 第四个n增1加在m上,m=m+6=13+6=19.

不必责怪VC++6.0的编译器。C/C++没有具体规定表达式的算法细节,VC++6.0的编译器这么做合法!别的编译器有另外做法也合法——这就是专家们常强调的“不要写边缘化语句”的原因——因编译器有不同解释而降低了代码的移植性。仅供参考……

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GetSafeHwnd
2015-01-28 · TA获得超过918个赞
知道大有可为答主
回答量:1068
采纳率:76%
帮助的人:745万
展开全部
写出这种代码的直接抄鱿鱼, 请参参考【C Prime Plus 5.3.6 不要太聪明 】
追问
还没有炒鱿鱼的机会,只是编译着试试!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式