打印
[51单片机]

说说 头文件

[复制链接]
388|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1762054myphone|  楼主 | 2023-3-22 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好 ,
1. 头文件里面 要不要写函数体啊
2. 如果头文件里,没有写函数体 只写了个函数名。在主函数里面仅 【 # include 改头文件 】, 编译时怎么找到子函数体啊
谢谢

使用特权

评论回复
评论
hobbye501 2023-3-24 15:39 回复TA
尽量不要写函数体 写函数声明就行 想用它就调用这个头文件即可 
沙发
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文件呢?

使用特权

评论回复
5
xch| | 2023-3-22 15:22 | 只看该作者
编译器自己会在工程中包含的一堆文件中搜索到尸体。

使用特权

评论回复
6
zhanan| | 2023-3-22 15:26 | 只看该作者
头文件的内容可是看做程序文件(如X)的摘录,表示有些函数可以供外界引用。如果别的程序(如B)也用到某个函数,就在程序B中用包含X头文件来说明一下,表示引用的函数在别的C程序中。
你的A B X都用到了f(x),f(x)在哪个C程序中你是知道的。机器编译是在工程中搜索函数名,管他在哪个C文件中。
如果包含程序体,程序不是重复定义了吗?如果共用了外设和全局变量,会发生冲突。



使用特权

评论回复
7
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文件内部可以调用。

使用特权

评论回复
8
ayb_ice| | 2023-3-22 15:52 | 只看该作者
在编译的过程中,只要先声明了,就可以了,(先声明后使用),所以一般先包含头文件,后写具体代码

使用特权

评论回复
9
timerc| | 2023-3-22 15:58 | 只看该作者
头文件就是说一下有这个函数,函数定义的.c文件里面定义函数的时候要引用这个头文件的;这样不就关联起来了么;一个头文件对应一个或者多个C文件,C文件里面定义函数前引用.h文件;

使用特权

评论回复
10
1762054myphone|  楼主 | 2023-3-22 16:18 | 只看该作者
timerc 发表于 2023-3-22 15:58
头文件就是说一下有这个函数,函数定义的.c文件里面定义函数的时候要引用这个头文件的;这样不就关联起来了 ...

嗯嗯 谢谢您 , 非常清晰 ~

使用特权

评论回复
11
1762054myphone|  楼主 | 2023-3-22 16:27 | 只看该作者
定义函数的.c文件, 都必须引用.h头文件对吗(否则就不合法)? (模块化设计时)

使用特权

评论回复
12
walker2048| | 2023-3-22 19:16 | 只看该作者
1762054myphone 发表于 2023-3-22 16:27
定义函数的.c文件, 都必须引用.h头文件对吗(否则就不合法)? (模块化设计时) ...

直接在c源码里使用extern 调用外部符号也可以。.h头文件除了提供公共函数接口外,还会提供接口所需参数的类型。比方说你有一个XXX_init()函数需要给别的c文件使用,这个函数不需要传递特殊类型的参数(传入和传出)的,那就不需要写.h头文件,直接在调用前extern 引入外部符号即可,

使用特权

评论回复
13
ayb_ice| | 2023-3-23 08:29 | 只看该作者
1762054myphone 发表于 2023-3-22 16:27
定义函数的.c文件, 都必须引用.h头文件对吗(否则就不合法)? (模块化设计时) ...

当然不是必须的,全部直接在C文件里写是可以的

使用特权

评论回复
14
coody| | 2023-3-23 10:17 | 只看该作者
头文件不要写函数,只写宏定义、外部函数声明、外部变量声明、寄存器定义,要有避免重复包含的语句。

使用特权

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

本版积分规则

3

主题

18

帖子

0

粉丝