打印

用过gcc for arm的看看,一个奇怪的问题

[复制链接]
2366|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djyos|  楼主 | 2008-3-19 16:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, FOR, GCC, IO, TI
版本是gcc for arm 4.1.1 
代码中,有些函数先调用后定义,而且没有在文件开头声明,但gcc编译时,有些地方报告错误,有些地方报告告警, 
比如,在166行调用了函数846行定义的__write_roll_bak函数,出来的是告警信息 
mdr.c:166: warning: implicit declaration of function '__write_roll_bak' 
mdr.c:846: warning: conflicting types for '__write_roll_bak' 
mdr.c:166: warning: previous implicit declaration of '__write_roll_bak' was here 
在79行调用了350行定义的__read_MDR_main函数,出来的是出错信息 
mdr.c:79: warning: implicit declaration of function '__read_MDR_main' 
mdr.c:350: error: conflicting types for '__read_MDR_main' 
mdr.c:79: error: previous implicit declaration of '__read_MDR_main' was here 

如果在头文件把函数声明一下,则告警和出错信息都消失了,说明语法本身是正确的。 
迷惑中,哪位大侠解解惑? 

相关帖子

沙发
djyos|  楼主 | 2008-3-20 10:00 | 只看该作者

gcc这么冷门吗?我用得挺好的啊

使用特权

评论回复
板凳
aolin| | 2008-3-31 23:34 | 只看该作者

不声明就调用,本身就是个不良习惯

没有声明的函数调用,编译器会当作默认的类型来处理.
我想是当编译器发现默认类型和实际类型相容时就只发出警告,否则就报错了.

使用特权

评论回复
地板
simon21ic| | 2008-3-31 23:50 | 只看该作者

79行的__read_MDR_main调用方式和350行的不同

单单调用没有申明的函数不会引起错误,但如果2此调用不一致的话,会有错误。
可能__read_MDR_main函数有返回值,如果一次没用,而另一次用了的话,会似的编译器认为这2个函数名字一样,所以产生冲突

使用特权

评论回复
5
djyos|  楼主 | 2008-4-1 09:56 | 只看该作者

多谢楼上两位

原因找到了,确如两位所说,是两处调用不一致造成的。
不声明就调用确实不是好习惯,可不是,人懒起来什么事都干得出来。

使用特权

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

本版积分规则

60

主题

454

帖子

1

粉丝