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

[复制链接]
2990|4
 楼主| djyos 发表于 2008-3-19 16:15 | 显示全部楼层 |阅读模式
ARM, FOR, GCC, IO, TI
版本是gcc&nbsp;for&nbsp;arm&nbsp;4.1.1&nbsp;<br />代码中,有些函数先调用后定义,而且没有在文件开头声明,但gcc编译时,有些地方报告错误,有些地方报告告警,&nbsp;<br />比如,在166行调用了函数846行定义的__write_roll_bak函数,出来的是告警信息&nbsp;<br />mdr.c:166:&nbsp;warning:&nbsp;implicit&nbsp;declaration&nbsp;of&nbsp;function&nbsp;'__write_roll_bak'&nbsp;<br />mdr.c:846:&nbsp;warning:&nbsp;conflicting&nbsp;types&nbsp;for&nbsp;'__write_roll_bak'&nbsp;<br />mdr.c:166:&nbsp;warning:&nbsp;previous&nbsp;implicit&nbsp;declaration&nbsp;of&nbsp;'__write_roll_bak'&nbsp;was&nbsp;here&nbsp;<br />在79行调用了350行定义的__read_MDR_main函数,出来的是出错信息&nbsp;<br />mdr.c:79:&nbsp;warning:&nbsp;implicit&nbsp;declaration&nbsp;of&nbsp;function&nbsp;'__read_MDR_main'&nbsp;<br />mdr.c:350:&nbsp;error:&nbsp;conflicting&nbsp;types&nbsp;for&nbsp;'__read_MDR_main'&nbsp;<br />mdr.c:79:&nbsp;error:&nbsp;previous&nbsp;implicit&nbsp;declaration&nbsp;of&nbsp;'__read_MDR_main'&nbsp;was&nbsp;here&nbsp;<br /><br />如果在头文件把函数声明一下,则告警和出错信息都消失了,说明语法本身是正确的。&nbsp;<br />迷惑中,哪位大侠解解惑?&nbsp;<br /><br />
 楼主| djyos 发表于 2008-3-20 10:00 | 显示全部楼层

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

  
aolin 发表于 2008-3-31 23:34 | 显示全部楼层

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

没有声明的函数调用,编译器会当作默认的类型来处理.<br />我想是当编译器发现默认类型和实际类型相容时就只发出警告,否则就报错了.<br />
simon21ic 发表于 2008-3-31 23:50 | 显示全部楼层

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

单单调用没有申明的函数不会引起错误,但如果2此调用不一致的话,会有错误。<br />可能__read_MDR_main函数有返回值,如果一次没用,而另一次用了的话,会似的编译器认为这2个函数名字一样,所以产生冲突
 楼主| djyos 发表于 2008-4-1 09:56 | 显示全部楼层

多谢楼上两位

原因找到了,确如两位所说,是两处调用不一致造成的。<br />不声明就调用确实不是好习惯,可不是,人懒起来什么事都干得出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

454

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部