打印

在使用PIC单片机时,出现的关于函数声明编译误

[复制链接]
1997|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yywxwen|  楼主 | 2009-4-16 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的函数在头文件(.h)中声明了extern unsigned char Sc16c2550_Read(unsigned char Reg);
在我编译后,就会出现题目中的错误,如果屏蔽掉,就无妨。但我还在此文件中声明了其他函数,如:extern void rxmsg(void);
extern void Sc16c2550_Init();
extern void Sc16c2550_Write(unsigned char Reg,unsigned char val);这些就不会出错,请问为什么?

相关帖子

沙发
yewuyi| | 2009-4-16 10:13 | 只看该作者

没看明白怎么回事情。。。。

使用特权

评论回复
板凳
yywxwen|  楼主 | 2009-4-16 10:45 | 只看该作者

具体情况是这样....

我在uart.c中用到了sc16c2550.C中定义的函数:unsigned char Sc16c2550_Read(unsigned char Reg)。所以我就要在uart.c中调用头文件sc16c2550.H(因为此文件里声明了unsigned char Sc16c2550_Read(unsigned char Reg)函数)。但这样的话,我编译程序就会出SYNTAX ERROR的错误,并且错误指向这里。
如果我在uart.c中,直接在顶部声明:extern unsigned char Sc16c2550_Read(unsigned char Reg),而把sc16c2550.H中的声明去掉,函数编译就没问题。

使用特权

评论回复
地板
machunshui| | 2009-4-16 11:05 | 只看该作者

有别的方面错误

有别的方面错误.

直接在顶部声明:extern unsigned char Sc16c2550_Read(unsigned char Reg)

和#include "xxx.h",xxx.h中含有extern unsigned char Sc16c2550_Read(unsigned char Reg)

是完全等价的.


#include "xxx.h"中的语句,就是把xxx.h的内容原封不动的插入到该#include语句处!

使用特权

评论回复
5
yywxwen|  楼主 | 2009-4-16 11:23 | 只看该作者

可是放在顶部就可以,放在.h文件就不行,这又说明傻了什么

使用特权

评论回复
6
headwolf_83| | 2009-4-16 21:40 | 只看该作者

没弄清楚多文件是怎么搞的

建议你看看MCHP的复杂的协议栈代码中的多文件的写法。比如TCP/IP的,或者USB的。

函数A,对应 M.c和M.h,如果在M.H中用EXTERN声明A,请注意,M.c就不能包含这M.h,其它C文件可以包含M.h。

合适的办法是根本不用extern。M.H中直接声明,任意一个C文件就都可以包含M.h。

使用特权

评论回复
7
ayb_ice| | 2009-4-16 22:32 | 只看该作者

这些都是初级问题

使用特权

评论回复
8
李冬发| | 2009-4-17 10:10 | 只看该作者

你没交代的很清楚,不太知道具体原因,估计是函数原型重

使用特权

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

本版积分规则

4

主题

17

帖子

0

粉丝