社区
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);
}
输出结果是什么?
...全文
880
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写文章
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)
理解kernel Makeiflie
编译
12年嵌入式开发,一直在一线做产品研发, 深深明白,看懂
编译
流程,掌握代码是如何
编译
非常重要 做一个芯片方案,从拿到资料和代码开始,第一件事就是
编译
代码,解决
编译
问题 另外,看懂代码也必须看懂
编译
过程,...
项目进度和bug跟踪 ,自己用的,
不许
偷看
项目前期需要搭建开发环境,并使用自动化
编译
,部署,测试,打包 工具, 这里主要进行单元测试和功能测试 完成后需要进行性能测试,并进行优化处理 当项目上线了就需要进行bug跟踪管理,推荐的使用 bug管理系统...
java面试题指南(三十一题)
第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承... 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,
《经 典 文 章 大 赏》
老师不小心瞄到我的笔记本,但又不忍让我难堪,就提高音量:“嫌疑犯”!我迟疑了一秒,似有所悟,提笔将“咸饭”改成“咸鱼饭”。老师再瞄后有点晕,故意提高音量说:“是犯人的嫌疑犯”!我听了觉得很有道理,于是再...
爱情观
两性问题自古长存,值得我们认真地、反复地思考,如果这类大事还随波逐流的话,无疑是对自己人生的不负责。 自古英雄难过美人关,不仅是英雄难过美人关,纵使是圣人亦是如此……,孔子和孟子都是因为...“
不许
坐...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章