社区
C语言
帖子详情
发个小题让大家做做,不许编译偷看哦
jruv
2006-03-23 12:39:04
void foo(int m, int n)
{
printf("m=%d, n=%d\n", m, n);
}
int main()
{
int b = 3;
foo(b+=3, ++b);
printf("b=%d", b);
}
输出结果是什么?
...全文
887
45
打赏
收藏
发个小题让大家做做,不许编译偷看哦
void foo(int m, int n) { printf("m=%d, n=%d\n", m, n); } int main() { int b = 3; foo(b+=3, ++b); printf("b=%d", b); } 输出结果是什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
45 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
aya331
2006-03-26
打赏
举报
回复
===============================
这条问题跟编译器有关系!
我用TurboC2.0和VC6.0出来的结果都是:
m=7 , n=4
b=7
================================
这是出入栈的顺序问题。
aya331
2006-03-25
打赏
举报
回复
根据入栈的规则我认为是输出7 4。
localhero
2006-03-25
打赏
举报
回复
请高人解释一下!!!!
localhero
2006-03-25
打赏
举报
回复
请用 VC7.1 Debug和 Release 分别测试这同一份代码
release是什么????
jruv
2006-03-25
打赏
举报
回复
ox_thedarkness的解释比较合理,不过最好看看编译器生成的汇编码就清楚了,debug版本的好看,不知道VC里release版本的怎么看汇编码
aniude
2006-03-25
打赏
举报
回复
.NET 下
是
m=7,n=7
b=7
比较BT,呵呵
wi1son
2006-03-25
打赏
举报
回复
这条问题跟编译器有关系!
我用TurboC2.0和VC6.0出来的结果都是:
m=7 , n=4
b=7
zzw820626
2006-03-25
打赏
举报
回复
C++之父教育我们多少次了,函数参数的求值顺序是未定义的,怎么还有这样的事情发生?
foo(b+=3, ++b);
liumingqiang02
2006-03-25
打赏
举报
回复
ox_thedarkness()说得很清楚啊,还是不争论这个问题比较好!
rosegun38
2006-03-24
打赏
举报
回复
m=7,n=4
b=7
september___29
2006-03-24
打赏
举报
回复
最好还是写清晰一点的code
trisen
2006-03-24
打赏
举报
回复
m=7.n=4
b=7,++优先级
slayer530
2006-03-24
打赏
举报
回复
毫无意义....执着于语言是没有前途的.
ox_thedarkness
2006-03-24
打赏
举报
回复
to ugg()
我觉得未定义就是最好的解释,完全按照标准的说法,坚决不写与实现相关的代码是最好的对策。 标准这么说的意思就是:只要没有顺序点你怎么做方便就怎么做。 所以我坚决不同意你最开始的解释方法,那是一种误导。这个东西要解释,无异于事后诸葛亮:
首先入栈顺序基本上都是是右到左,因为C/C++要支持变长参数表,必须保证最左参数在栈顶。但是这个顺序和求值、副作用是两码事。
void f( int i1, int i2, int i3, int i4 ){
cout<< i1 << ' ' << i2 << ' ' << i3 << ' ' << i4 << endl;
}
int main(){
int i = 0;
f( i++, i++, i++, i++ );
}
这个有四个表达式求值,同时每个表达式都有负作用。这八个操作顺序是任意的,那么结果如何?未定义。
请用 VC7.1 Debug和 Release 分别测试这同一份代码,结果是
0 0 0 0 [release]
3 2 1 0 [debug]
根本无须解释,也不能解释。 对于编译器优化, 要明确一点: 编译器的优化不会改变语义。 正是因为语义中这里可以任意解释所以编译器才会优化。
starcloudmountain
2006-03-24
打赏
举报
回复
有意思
逸学堂
2006-03-24
打赏
举报
回复
TO:jruv
这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同
编译器得处理不同。也是因为C标准中对这种方式说明为未定义,所以
各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。
因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理
这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得
结果。最后是看编译器优化。
猞猁狲
2006-03-24
打赏
举报
回复
牛!学习
nipcdll
2006-03-24
打赏
举报
回复
学习
nightcapture
2006-03-24
打赏
举报
回复
m=6,n=7
b=7
superliulin
2006-03-24
打赏
举报
回复
好玩,以前看过,还有点印象,和编译器有关
加载更多回复(25)
项目进度和bug跟踪 ,自己用的,
不许
偷看
项目前期需要搭建开发环境,并使用自动化
编译
,部署,测试,打包 工具, 这里主要进行单元测试和功能测试 完成后需要进行性能测试,并进行优化处理 当项目上线了就需要进行bug跟踪管理,推荐的使用 bug管理系统jira来管理, 考虑到要方便使用 就也可以自己写一个哈哈 当前项目的任务有: 页面的重新设计,(目标兼容ie6 包括 360 ) ...
java面试题指南(三十一题)
第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,
《经 典 文 章 大 赏》
《经 典 文 章 大 赏》 1.老师普通话说的不好,有一回老师听写,我坐第一排专注的听着老师发音。老师读:“嫌犯”,我立刻在笔记本写上“咸饭”。老师不小心瞄到我的笔记本,但又不忍让我难堪,就提高音量:“嫌疑犯”!我迟疑了一秒,似有所悟,提笔将“咸饭”改成“咸鱼饭”。老师再瞄后有点晕,故意提高音量说:“是犯人的嫌疑犯”!我听了觉得很有道理,于是再加上三个字“放盐的咸鱼饭”。老师再也忍不住了,用翻白眼的眼神对我说:我说的是“有一位嫌疑犯”!我当时有点紧张,用颤抖的笔迹写下:“鱿鱼味咸鱼饭”。老师只好走到我身边,
新英汉翻译词典软件vb代码
Private Sub Command1_Click() Dim i, Z As String Dim n As Integer i = Text1.Text For n = 1 To 960 Select Case i case"abandon" Z = " v.抛弃,放弃" case"abandonment" Z = " n.放弃" case"abbreviation" Z = " n.缩写" case"abeyance" Z = " n.缓办,中止" case"abide" Z = " v.遵守" c
爱情观
两性问题自古长存,值得我们认真地、反复地思考,如果这类大事还随波逐流的话,无疑是对自己人生的不负责。 自古英雄难过美人关,不仅是英雄难过美人关,纵使是圣人亦是如此……,孔子和孟子都是因为没有处理好此类事情而出现婚姻问题。从这个角度望去,那些一辈子不离婚的夫妻,才真是奇迹般的存在! 我们会主要从两个角度去看待两性问题:一是全神贯注的投入;二是不爱那么多,只爱一点点。 全神贯注的投入 “
不许
坐...
C语言
70,020
社区成员
243,265
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章