[51单片机] 说说 头文件

[复制链接]
1256|14
 楼主| 1762054myphone 发表于 2023-3-22 11:24 | 显示全部楼层 |阅读模式
您好 ,
1. 头文件里面 要不要写函数体啊
2. 如果头文件里,没有写函数体 只写了个函数名。在主函数里面仅 【 # include 改头文件 】, 编译时怎么找到子函数体啊
谢谢

评论

尽量不要写函数体 写函数声明就行 想用它就调用这个头文件即可  发表于 2023-3-24 15:39
ayb_ice 发表于 2023-3-22 13:04 | 显示全部楼层
头文件里叫函数声明,非要写函数体也是可以的,需要点小技巧
 楼主| 1762054myphone 发表于 2023-3-22 13:41 | 显示全部楼层
嗯 谢谢您
如果头文件里不写函数体, 那怎么知道头文件声明的函数 在哪?
 楼主| 1762054myphone 发表于 2023-3-22 13:54 | 显示全部楼层
ayb_ice 发表于 2023-3-22 13:04
头文件里叫函数声明,非要写函数体也是可以的,需要点小技巧

你好 前辈,
我还是有点不清楚, 如果.h头文件里不写函数体, 又怎么知道它声明的子函数到底在哪个.c的文件里。
如果一个工程里包含了很多个名称千其百怪.c的文件, 那么.h头文件声明的函数 是在哪个.c的文件里面呢。
此外,例如 A.c, B.c,X.c 的文件(都在同一个工程树下)都包含了.h头文件声明的子函数 f(x), 那用哪个.c文件呢?
xch 发表于 2023-3-22 15:22 | 显示全部楼层
编译器自己会在工程中包含的一堆文件中搜索到尸体。
zhanan 发表于 2023-3-22 15:26 | 显示全部楼层
头文件的内容可是看做程序文件(如X)的摘录,表示有些函数可以供外界引用。如果别的程序(如B)也用到某个函数,就在程序B中用包含X头文件来说明一下,表示引用的函数在别的C程序中。
你的A B X都用到了f(x),f(x)在哪个C程序中你是知道的。机器编译是在工程中搜索函数名,管他在哪个C文件中。
如果包含程序体,程序不是重复定义了吗?如果共用了外设和全局变量,会发生冲突。



zhanan 发表于 2023-3-22 15:43 | 显示全部楼层
你去看看我的这个程序 https://bbs.21ic.com/icview-3282436-1-1.html
里面有好多函数,但只有三个是可供外界引用的:
void FEE_init(void); // 初始化
u16 FEE_rd(en_feedata_t); // 读
void FEE_wr(u16,en_feedata_t); // 写
我把他们写在头文件里,这样:
extern void FEE_init(void);
extern u16 FEE_rd(en_feedata_t);
extern void FEE_wr(u16,en_feedata_t);
前面加上了关键字 extern
在别的C程序里如果有用到模拟eeprom,就调用上面三个函数,这样就转到eeprom.C程序中了。
其他没有对外的函数则属于内部函数,仅同一个C文件内部可以调用。
ayb_ice 发表于 2023-3-22 15:52 | 显示全部楼层
在编译的过程中,只要先声明了,就可以了,(先声明后使用),所以一般先包含头文件,后写具体代码
timerc 发表于 2023-3-22 15:58 | 显示全部楼层
头文件就是说一下有这个函数,函数定义的.c文件里面定义函数的时候要引用这个头文件的;这样不就关联起来了么;一个头文件对应一个或者多个C文件,C文件里面定义函数前引用.h文件;
 楼主| 1762054myphone 发表于 2023-3-22 16:18 | 显示全部楼层
timerc 发表于 2023-3-22 15:58
头文件就是说一下有这个函数,函数定义的.c文件里面定义函数的时候要引用这个头文件的;这样不就关联起来了 ...

嗯嗯 谢谢您 , 非常清晰 ~
 楼主| 1762054myphone 发表于 2023-3-22 16:27 | 显示全部楼层
定义函数的.c文件, 都必须引用.h头文件对吗(否则就不合法)? (模块化设计时)
walker2048 发表于 2023-3-22 19:16 | 显示全部楼层
1762054myphone 发表于 2023-3-22 16:27
定义函数的.c文件, 都必须引用.h头文件对吗(否则就不合法)? (模块化设计时) ...

直接在c源码里使用extern 调用外部符号也可以。.h头文件除了提供公共函数接口外,还会提供接口所需参数的类型。比方说你有一个XXX_init()函数需要给别的c文件使用,这个函数不需要传递特殊类型的参数(传入和传出)的,那就不需要写.h头文件,直接在调用前extern 引入外部符号即可,
ayb_ice 发表于 2023-3-23 08:29 | 显示全部楼层
1762054myphone 发表于 2023-3-22 16:27
定义函数的.c文件, 都必须引用.h头文件对吗(否则就不合法)? (模块化设计时) ...

当然不是必须的,全部直接在C文件里写是可以的
coody 发表于 2023-3-23 10:17 | 显示全部楼层
头文件不要写函数,只写宏定义、外部函数声明、外部变量声明、寄存器定义,要有避免重复包含的语句。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

18

帖子

0

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