请教个问题-关于ICCAVR编译

[复制链接]
 楼主| CIOneTwo 发表于 2011-7-14 12:44 | 显示全部楼层 |阅读模式
我现在有三个.C文件a.c,b.c,d.c,一个.h文件,问题如下:
问题1:
a.c有函数void a(void)
b.c,d.c里面调用a.c此函数a()
我并没有在.h函数里面声明外部函数,为毛ICCAVR也能编译通过并无提示函数未定义啊?
问题2:
在Project-->Options里面我也没有设置ICCAVR Include头文件地址,为毛也能编译通过并无提示未找到头文件啊?
问题3:
ICCAVR多个C文件编译的顺序是啥啊?主函数-->其他的根据相关关系连接顺序?
似乎makefile里面是按顺序编译文件的啊......
请教大家,谢谢......
 楼主| CIOneTwo 发表于 2011-7-14 14:03 | 显示全部楼层
请高手帮忙啊
zgx7261663 发表于 2011-7-14 15:56 | 显示全部楼层
你出现的问题有点怪异,我不设置INCLUDE路径,不在.H文件声明外部函数就有错误提示的啊? 是你ICC设置的问题?似乎你的ICC很智能耶!   弄个仿真器单步调试下程序,看看运行到a();程序的时候是什么效果,如果进入a()里边运行了,那只能说你的ICC比较牛×了!
zgx7261663 发表于 2011-7-14 15:58 | 显示全部楼层
你是不是没有把所有.C文件和.H文件放在编译目录下啊?
 楼主| CIOneTwo 发表于 2011-7-15 08:32 | 显示全部楼层
谢谢楼上,所有.c和.h我都放在编译目录下了,我也觉得挺不可思议的,ICCAVR我没有做任何设定,就是建个工程,把.c和.h文件拖进来,然后设置下,include地址,output地址就编译了,现在看来include地址设置也免了.
我虽未用仿真器调试,不过我要实现的功能是OK的,说明编译并无问题,iccavr在编译的时候已经自动把相关文件进行相关链接了,是智能还是BUG啊,我晕啊......
原野之狼 发表于 2011-7-15 08:50 | 显示全部楼层
只要有声明即可,不需要声明为外部函数。
 楼主| CIOneTwo 发表于 2011-7-15 12:35 | 显示全部楼层
谢谢小狼的回复,我在.h文件里面连声明都没有,但是b.c,d.c照样可以用a.c中的函数,但是数组,变量不可以,必须要有外部声明。
原野之狼 发表于 2011-7-15 12:42 | 显示全部楼层
把警告级别调高点 看看有没有信息输出
在没有声明的时候 编译器会采取隐式推导出外部函数的接口方式
不过这种方式存在这很大的风险 对于简单的接口不会出问题 但是对于复杂的接口就未必能正确运行了
 楼主| CIOneTwo 发表于 2011-7-15 13:58 | 显示全部楼层
LS说的我理解不了了,不过为了保险,我还是在程序里面加上外部声明吧,免得以后出BUG。
谢谢zgx7261663,谢谢小狼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:贫寒铸就人格,逆境创造人生。

0

主题

1194

帖子

1

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