结贴!学术成了骂娘了,没劲return也能返回

rrang   2009-12-11 18:56 楼主


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;

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


}

回复评论 (69)



无聊的帖子。
如有雷同,纯属巧合。
点赞  2009-12-11 20:52
                                 但这个问题不符合ANSI C的规范,因此还是可以认为是KEIL的一个bug,其实我们陆续发现了多个错误,也和应贝特联系过,感觉其实realview的问题还是比较多的
点赞  2009-12-11 21:26
点赞  2009-12-12 00:35
但这个问题不符合ANSI C的规范,因此还是可以认为是KEIL的一个bug,其实我们陆续发现了多个错误,也和应贝特联系过,感觉其实realview的问题还是比较多的 ...
在你没有搞清楚它的内部实现机理的时候,请不要轻易断言Bug。

你所碰到的问题,2楼说的对,这只是一个巧合,与Bug无关。
点赞  2009-12-12 08:41
C编译器一般是不做返回规则检查的,你不写返回默认你不需要。

这不是编译器的BUG,完全属于你知识点的BUG ,呵呵,说的难听点就是针对这个你‘无知’了
点赞  2009-12-12 09:02
to yewuyi:
请勿轻言无知,如果你知道编译器的设计必须遵循ansi c 的规范的话,这句话你会咽回去的。
这点是编译原理的常识。
我贴出来的程序表明此编译器没有在程序声明return ,并明确返回值时,就“正确的”返回了,请各位先运行一下看看,add返回的是0x10,为什么不返回d的值,而是返回C的值?
这是科学讨论,毕竟realview就是一个编译器产品。
点赞  2009-12-12 10:40
to 香水城
没必要了解它的内部机理,它怎么设计与用户无关,只要明确它必须实现C的标准即可。
点赞  2009-12-12 10:42
LZ,编译器的警告难道你看不见吗?

而且,你从哪里确定“居然运行正确”的?
点赞  2009-12-12 10:52
                                 这个应该是错误的程序,请你先运行一下,单步调试完再说。
点赞  2009-12-12 10:57
                                 希望大家运行,单步调试一下再来讨论。
点赞  2009-12-12 10:58


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


本贴因被人投诉有骂娘嫌疑,特做处理
点赞  2009-12-12 11:04
警告不是错误,这里应该错误。
楼上的刷牙了吗?
点赞  2009-12-12 11:05
你别说,还真没有,我刚起来,
这都被你猜出来,看来我们果然不在同一级别
嗯,好吧:realview有弱智的BUG,大家以后写程序都按楼主的良好风格去写.
点赞  2009-12-12 11:07
                                 当然,水平不一样,脑子是思维的,不是骂人的
点赞  2009-12-12 11:09
当然,水平不一样,脑子是思维的,不是骂人的
受教了,学习..
点赞  2009-12-12 11:13
大家以后注意了,
"在一个错误的基础上面讨论个P" == "骂娘"
以后发言千万注意.
点赞  2009-12-12 11:24
ATPCS规则:
   1.结果为一个32位的整数时,通过寄存器R0返回.
    2.结果为一个64位整数时,通过R0和R1返回,依此类推.
楼主的add函数中,变量c的结果恰好存储在R0中,所以运行起来碰巧正确。
如果楼主的本意是返回d而没有写return,结果就是错的了。
点赞  2009-12-12 11:31
我顶
21ic最近怎么都变成对骂的地方了
很不明白???
不就一个问题吗?
LZ看下反汇编
再了解下C编译成汇编参数是怎么传的 返回值又是怎么返回的就ok了
假如想更深入的了解的话 就弄明白局部变量放在什么地方 全局变量放在什么地方 堆和栈的区别
在一个C语言中 数据段是怎么安排的
个人觉得还是从基础上分析问题比较稳妥点
先把原理弄懂来
个人意见
点赞  2009-12-12 11:35
[quote]to yewuyi:
请勿轻言无知,如果你知道编译器的设计必须遵循ansi c 的规范的话,这句话你会咽回去的。
这点是编译原理的常识。
我贴出来的程序表明此编译器没有在程序声明return ,并明确返回值时,就“正确的”返回 ...
[/quot


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

你继续折腾玩把。。。
点赞  2009-12-12 11:36
1234下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复