打印

keilV4没有任何递归检查,没错,任何!朋友们帮忙确认下:-(

[复制链接]
楼主: sedatefire
手机看帖
扫描二维码
随时随地手机跟帖
21
icecut| | 2013-9-6 11:24 | 只看该作者 回帖奖励 |倒序浏览
sedatefire 发表于 2013-9-6 09:06
不用怀疑main有特例, 下面这个也是一样的
void test(void)
{

程序语**确.编译正确.
至于是不是报警,看编译器心情

使用特权

评论回复
22
sedatefire|  楼主 | 2013-9-6 11:28 | 只看该作者
icecut 发表于 2013-9-6 11:24
程序语**确.编译正确.
至于是不是报警,看编译器心情

这个编译器还真没有支持
因为arm架构支持了函数指针,所以递归检测就是个笑话。

使用特权

评论回复
23
江枫渔火| | 2013-9-6 11:51 | 只看该作者
分分。。。。。

使用特权

评论回复
24
kseeker| | 2013-9-6 12:04 | 只看该作者
sedatefire 发表于 2013-9-6 11:13
哦? 我可以理解成递归在嵌入式里面很常见吗? 这点我不赞同的。
函数指针在嵌入式里面倒是很常见。 ...

常见与否取决于你干什么。你如果只用C51写一些简单程序,那自然递归不会常见。就我来说,我用的确实不算多,但除了C51,还没听说哪个C编译器会对递归函数调用进行警告。

说到递归应用,基本上,只要有“树”这个东西存在,就必然存在递归。我现在的程序是STM32裸奔,界面被描述为一棵控件树,里面就有大量的递归。又比如xml文件处理,一般也是递归进行的(现在用xml进行配置的嵌入式程序可是不少了)。
另外,如果有操作系统和消息循环,那么send_message这样的函数很可能就是递归的。至少就我所知,WinCE程序里就是这么回事。
至于有大量模块,成千上万个函数的程序,模块间交互很有可能导致递归,甚至你都不会注意到。

使用特权

评论回复
25
linqing171| | 2013-9-6 12:14 | 只看该作者
PIC12的编译器都会。
因为它是硬件堆栈,优化分配的适合,必须计算调用树。

IAR也会生成调用树。 keil的warning最少。

使用特权

评论回复
26
李富贵| | 2013-9-6 12:27 | 只看该作者
基本上所有的8位单片机编译器都是对局部变量静态分配RAM,所以都不支持标准C语言要求支持的递归。而32位单片机编译器则是标准C的做法,在栈上动态分配局部变量,当然支持递归了。

使用特权

评论回复
27
zly0123yz| | 2013-9-6 14:02 | 只看该作者
这个题目层次有点高,新手学习学习~

使用特权

评论回复
28
sedatefire|  楼主 | 2013-9-6 14:56 | 只看该作者
kseeker 发表于 2013-9-6 12:04
常见与否取决于你干什么。你如果只用C51写一些简单程序,那自然递归不会常见。就我来说,我用的确实不算 ...

好吧,我认可你的大虾身份了
看来即使相处同一个行业,因为从事领域的内不同,认知的差距也是较大。

不过我想你说的应该是回调指针之类的吧?
我认为只要软件分层合理,递归是极为罕见的,尤其是跨模块(.c档)的递归。
在函数层级,要吗算法需要,要吗节约程序空间,才谨慎使用一下递归。
嵌入式的栈可经不起递归的折腾。

使用特权

评论回复
29
sedatefire|  楼主 | 2013-9-6 14:58 | 只看该作者
李富贵 发表于 2013-9-6 12:27
基本上所有的8位单片机编译器都是对局部变量静态分配RAM,所以都不支持标准C语言要求支持的递归。而32位单 ...

我不纠结递归,
我纠结于编译器应该对于我的显性递归调用能够提供警告。
默认不警告,但至少提供一个打开的控制命令。

使用特权

评论回复
30
sedatefire|  楼主 | 2013-9-6 15:01 | 只看该作者
kseeker 发表于 2013-9-6 12:04
常见与否取决于你干什么。你如果只用C51写一些简单程序,那自然递归不会常见。就我来说,我用的确实不算 ...

严重怀疑你混淆了 递归 和 回调指针 的概念
;P

使用特权

评论回复
31
李富贵| | 2013-9-6 15:18 | 只看该作者
sedatefire 发表于 2013-9-6 14:58
我不纠结递归,
我纠结于编译器应该对于我的显性递归调用能够提供警告。
默认不警告,但至少提供一个打开 ...

没有那种支持标准C的编译器会提供这种警告,我查下我用的arm-none-eabi-gcc也没有这个功能。

使用特权

评论回复
32
tergy2012| | 2013-9-6 15:31 | 只看该作者
路过学习的

使用特权

评论回复
33
tergy2012| | 2013-9-6 15:43 | 只看该作者
路过看看的

使用特权

评论回复
34
HORSE7812| | 2013-9-6 18:24 | 只看该作者
路过

使用特权

评论回复
35
chuangpu| | 2013-9-6 19:31 | 只看该作者
不是很了解这一块    帮你顶一个  

使用特权

评论回复
36
dirtwillfly| | 2013-9-6 21:55 | 只看该作者
sedatefire 发表于 2013-9-6 09:18
我知道递归需要终止条件,
可我的意思是,我的意思是,keil要报警啊,要warning啊老大
我最近维护一个系 ...

这难道就是传说中的大型项目?

使用特权

评论回复
37
sedatefire|  楼主 | 2013-9-6 23:02 | 只看该作者
dirtwillfly 发表于 2013-9-6 21:55
这难道就是传说中的大型项目?

项目不算大,功能上说起来几句话概括了
但公司赖以起家的产品, 背负了沉重的历史包袱,要兼容新旧协议,十几个国家的分支合在一处,
程序的编译条件巨多,跨模块巨多,越来越庞大.

原先是51上实现的,之前的团队移植到M3上,工期紧,也没敢妄动..
到了我的手上,我也无奈得很,只有闭上眼睛往前摸了



使用特权

评论回复
38
sedatefire|  楼主 | 2013-9-6 23:03 | 只看该作者
李富贵 发表于 2013-9-6 15:18
没有那种支持标准C的编译器会提供这种警告,我查下我用的arm-none-eabi-gcc也没有这个功能。 ...

额,这个...,递归的事情,链接器才有办法知道的

使用特权

评论回复
39
sedatefire|  楼主 | 2013-9-6 23:51 | 只看该作者
赶紧结案啊,丢人啦   
哈哈

使用特权

评论回复
40
sedatefire|  楼主 | 2013-9-6 23:53 | 只看该作者
唉,一日后才能结贴
再暴晒一晚啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则