社区
C语言
帖子详情
菜鸟求救!!!!!!!!!!!!+++++急!!!!!!
zfl0833
2005-05-21 04:21:19
请问各位前辈 在c 语言 及 vc++ 和c++ builder 中如何解释以下程序的执行过程;
main ()
{
int n=1;
printf("%d,%d",n++,n++);
}
以上是在c语言下的代码, 请各位高手能不能帮我解释一下在c语言中,为什么结果为2,1
在vc++ 和 c ++ builder中结果又会怎样? 怎么样分析?
...全文
178
16
打赏
收藏
菜鸟求救!!!!!!!!!!!!+++++急!!!!!!
请问各位前辈 在c 语言 及 vc++ 和c++ builder 中如何解释以下程序的执行过程; main () { int n=1; printf("%d,%d",n++,n++); } 以上是在c语言下的代码, 请各位高手能不能帮我解释一下在c语言中,为什么结果为2,1 在vc++ 和 c ++ builder中结果又会怎样? 怎么样分析?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
soft_2008
2005-05-25
打赏
举报
回复
mark
cppprogramlover
2005-05-24
打赏
举报
回复
不要深究,还不如看看printf的实现。
cppprogramlover
2005-05-24
打赏
举报
回复
标准c不是 __cdecl吗,从右压栈
难道我记错了?
cppprogramlover
2005-05-24
打赏
举报
回复
有道理,如果 已知的那个参数在后面,就要左到右压栈了
jishuixyj1985
2005-05-24
打赏
举报
回复
因为printf()函数的数据流都是压入堆栈,在打印的,所以是从右到左啊~~
whyglinux
2005-05-24
打赏
举报
回复
To cppprogramlover(爱相随—)
>> 标准c不是 __cdecl吗,从右压栈
默认设置是这样。但是默认设置是可以改变的。
To jingyueid(干宁)
既然printf()的压栈顺序是固定的,那就更支持了我的观点。
jingyueid
2005-05-24
打赏
举报
回复
T:zhangfjj(小张(正在学习Linux。。。))
whyglinux(山青水秀) ( )
用压栈顺序来解释是不全面的。比如,无法解释结果是1,1(VC6中的结果)的情况。
zhangfjj(小张(正在学习Linux。。。)) 的解释是正确的,即标准没有规定函数参数的求值顺序,因此上述函数的行为是无定义的。
============================================================================
C标准是如何制定的我不清楚,但这里(变参函数)必须是采用反向压湛的顺序来完成操作。因为在汇编级代码无法知道具体有多少个参数,只有通过反向压栈的方法才能获得第一个参数,然后再得到以后的参数列表。这也就是为什么PASICAL不支持变参的原因。同样C/C++做的DLL也不用变参接口,防止VB等程序不能调用。
因此对于%s%d,这些字符都已经标志出类参数类型的尺寸信息。
whyglinux
2005-05-23
打赏
举报
回复
用压栈顺序来解释是不全面的。比如,无法解释结果是1,1(VC6中的结果)的情况。
zhangfjj(小张(正在学习Linux。。。)) 的解释是正确的,即标准没有规定函数参数的求值顺序,因此上述函数的行为是无定义的。
lucymary1982
2005-05-23
打赏
举报
回复
结果是1,1
snailcl
2005-05-23
打赏
举报
回复
这个在c语言的书上肯定有讲啊,lbing7和goodboy1881的解释都可以
flyarry
2005-05-21
打赏
举报
回复
呵呵 又来这种问题了,以前看大虾们回答得多了.
printf("%d,%d",n++,n++); 先计算右边的n++,然后再算左边的,所以就是2,1了.
不知道我说的有没有错?
lbing7
2005-05-21
打赏
举报
回复
我觉得三井给出了合理的低层解释
我是按老师给我讲的
55555555555555555555555
谢谢过三井
zhangfjj
2005-05-21
打赏
举报
回复
函数对实参表达式的求值顺序的问题,标准C并未做出规定。
不过大多数编译器都是从右到左的顺序来进行求值的。
sunman1982
2005-05-21
打赏
举报
回复
同问 呵呵 不解
lbing7
2005-05-21
打赏
举报
回复
printf("%d,%d",n++,n++);
printf();里面的求值顺序是自右向左
printf("%d,%d",n++(2),n++(1));
一:做表达式(1)将n=1的值作为表达式的值,然后算n++,此时n==2
二:做表达式(2)将2作为表达式的值,然后做n++,此时n==3
三:按格式打印出来!也就是:2,1
积木
2005-05-21
打赏
举报
回复
解释比较简单,就是函数参数压栈的问题,C语言中,函数参数有从左向右压栈和从右向左压栈两种顺序,你看到的就是从右向左压栈,这样,在出栈的时候,最左面的参数最先出栈。嗯
所以就是n进栈,就是1,然后n++ ,然后n再进栈就是2,自然就是你看到的结果了,
你只要在不同的编译器下面都尝试一下就可以了,不需要深究。
java if
菜鸟
_
急
!java
菜鸟
求救
if else 问题
请各位高手看以下代码。请问如何把if中的变量用在下一个if循环中呢?publicclassQ2{//---------------------------------------------------------------//Thisprogramistodeterminet...请各位高手看以下代码。...
Java开发教程(3)
菜鸟
求助 实体bean用BMP对三个表操作 初学者跪求一下载程序,给定URL就可以下载的就行 我爱JAVA 紧
急
需要个记事本程序,各位大虾江湖救
急
! 如何用JAVA实现IDEA加密算法? 我想加入一个关于学习JAVA的QQ群...
系统:Shell和GDI Thread和杂项等
急
!! T请各位高手指教,在c 语言中,用程序怎样判断要操作的是一个目录还是一个文件?在c语言中要调用api函数时许包含什么头文件?具体要用到什么函数请多多帮忙!!谢谢!!APathIsDirectory#include Q用程序...
24届友友们还想去腾讯!?哪些岗位还在热招?看这一篇就足够!
双非硕进远景能源怎么样 双非硕 远景能源工艺岗 二本鼠鼠
求救
:数开or数分 到底是数据开发更看容易找到工作还是数据分析更容易找到工作啊我是一个二本生,刷了一个月牛客感觉二本不配在大数据赛道存活请求大家给条...
互联网寒冬结束!大厂开始扩招!技术岗坑位增加,早投早占坑!
但是最近发
求救
实习被发现了 实习被发现了辅导员让我在休学和回去上课里选一个 u们有什么建议吗 哈银消金 有哈银消金的伙伴吗?能透露一下工作的基本情况吗?能申请下来哈尔滨的人才补贴吗 TCL暑期实习来啦 TCL...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章