16143|69

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

结贴!学术成了骂娘了,没劲return也能返回 [复制链接]



main()
{
int a=8;
int b=0;
b=a;
b=add(a,b);
a=a+b;

}

int add(int a,int b)
{
int d,c;
  d=b-a+1;
c=a+b;

}
这是最简单的程序,居然运行正确?奇怪,大家看看


}
此帖出自stm32/stm8论坛

最新回复

                                 你写个错误的程序,至于返回谁是随机的.但是对于一个编译器或者一种优化方式.是固定的. 你愿意写错程序,没人会理你. 如果你非要说个什么规范,那keil给你个error然后拒绝编译得了.给你编译过了也提醒你了.你还在这瞎说 无知者无畏!  详情 回复 发表于 2009-12-16 22:03
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 


无聊的帖子。
如有雷同,纯属巧合。
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 但这个问题不符合ANSI C的规范,因此还是可以认为是KEIL的一个bug,其实我们陆续发现了多个错误,也和应贝特联系过,感觉其实realview的问题还是比较多的
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
R.jpg
此帖出自stm32/stm8论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

5
 
但这个问题不符合ANSI C的规范,因此还是可以认为是KEIL的一个bug,其实我们陆续发现了多个错误,也和应贝特联系过,感觉其实realview的问题还是比较多的 ...
在你没有搞清楚它的内部实现机理的时候,请不要轻易断言Bug。

你所碰到的问题,2楼说的对,这只是一个巧合,与Bug无关。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
C编译器一般是不做返回规则检查的,你不写返回默认你不需要。

这不是编译器的BUG,完全属于你知识点的BUG ,呵呵,说的难听点就是针对这个你‘无知’了
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 
to yewuyi:
请勿轻言无知,如果你知道编译器的设计必须遵循ansi c 的规范的话,这句话你会咽回去的。
这点是编译原理的常识。
我贴出来的程序表明此编译器没有在程序声明return ,并明确返回值时,就“正确的”返回了,请各位先运行一下看看,add返回的是0x10,为什么不返回d的值,而是返回C的值?
这是科学讨论,毕竟realview就是一个编译器产品。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

8
 
to 香水城
没必要了解它的内部机理,它怎么设计与用户无关,只要明确它必须实现C的标准即可。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
LZ,编译器的警告难道你看不见吗?

而且,你从哪里确定“居然运行正确”的?
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 这个应该是错误的程序,请你先运行一下,单步调试完再说。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 希望大家运行,单步调试一下再来讨论。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 


在一个错误的基础上面讨论个P
难道楼主的编译后,没有警告?


本贴因被人投诉有骂娘嫌疑,特做处理
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

13
 
警告不是错误,这里应该错误。
楼上的刷牙了吗?
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

14
 
你别说,还真没有,我刚起来,
这都被你猜出来,看来我们果然不在同一级别
嗯,好吧:realview有弱智的BUG,大家以后写程序都按楼主的良好风格去写.
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

15
 
                                 当然,水平不一样,脑子是思维的,不是骂人的
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

16
 
当然,水平不一样,脑子是思维的,不是骂人的
受教了,学习..
此帖出自stm32/stm8论坛
 
 
 

回复

103

帖子

0

TA的资源

一粒金砂(初级)

17
 
大家以后注意了,
"在一个错误的基础上面讨论个P" == "骂娘"
以后发言千万注意.
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

18
 
ATPCS规则:
   1.结果为一个32位的整数时,通过寄存器R0返回.
    2.结果为一个64位整数时,通过R0和R1返回,依此类推.
楼主的add函数中,变量c的结果恰好存储在R0中,所以运行起来碰巧正确。
如果楼主的本意是返回d而没有写return,结果就是错的了。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

19
 
我顶
21ic最近怎么都变成对骂的地方了
很不明白???
不就一个问题吗?
LZ看下反汇编
再了解下C编译成汇编参数是怎么传的 返回值又是怎么返回的就ok了
假如想更深入的了解的话 就弄明白局部变量放在什么地方 全局变量放在什么地方 堆和栈的区别
在一个C语言中 数据段是怎么安排的
个人觉得还是从基础上分析问题比较稳妥点
先把原理弄懂来
个人意见
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

20
 
[quote]to yewuyi:
请勿轻言无知,如果你知道编译器的设计必须遵循ansi c 的规范的话,这句话你会咽回去的。
这点是编译原理的常识。
我贴出来的程序表明此编译器没有在程序声明return ,并明确返回值时,就“正确的”返回 ...
[/quot


呵呵,你的问题在2楼就已经被正确回答过了,你还在这纠结什么?不知道答案也就罢了,当别人给了你正确答案并解释清楚后,你还这样纠结,让我等实在佩服的不得了。。。

你继续折腾玩把。。。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表