搜索
bottom↓
回复: 31

请教个问题,c语言的.H文件怎么生成的呢

[复制链接]

出0入0汤圆

发表于 2013-12-29 20:09:15 | 显示全部楼层 |阅读模式
请教个问题,c语言的.H文件怎么生成的呢?难道我们只能用别人现成的吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-12-29 20:12:33 | 显示全部楼层
表示很无语!!!!

出0入0汤圆

发表于 2013-12-29 20:16:25 | 显示全部楼层
用别人的和自己编辑都可以。

出0入93汤圆

发表于 2013-12-29 20:16:40 | 显示全部楼层
是通过键盘手工生成的

出0入0汤圆

发表于 2013-12-29 20:18:13 | 显示全部楼层
4楼说得对!

出0入0汤圆

发表于 2013-12-29 20:20:11 | 显示全部楼层

4楼说得对!

出0入0汤圆

 楼主| 发表于 2013-12-29 20:23:41 | 显示全部楼层
哦,就这么简单啊。那这个.H是不是就是子程序的集合啊?

出0入0汤圆

 楼主| 发表于 2013-12-29 20:24:02 | 显示全部楼层

哦,就这么简单啊。那这个.H是不是就是子程序的集合啊?

出0入0汤圆

 楼主| 发表于 2013-12-29 20:25:13 | 显示全部楼层

哦,就这么简单啊。那这个.H是不是就是子程序的集合啊?

出0入0汤圆

发表于 2013-12-29 20:28:16 | 显示全部楼层
zhiguangqi 发表于 2013-12-29 20:24
哦,就这么简单啊。那这个.H是不是就是子程序的集合啊?

头文件一般包括宏定义,各种类型的定义,函数的声明,变量的声明,内联函数的定义。
从没听说过子程序集合这一说的。一般程序都在.c或者lib中。

出0入0汤圆

发表于 2013-12-29 20:28:51 | 显示全部楼层
差不多就是一些定义之类的,你可以打开看看

出0入0汤圆

 楼主| 发表于 2013-12-29 20:28:55 | 显示全部楼层
lcofjp 发表于 2013-12-29 20:28
头文件一般包括宏定义,各种类型的定义,函数的声明,变量的声明,内联函数的定义。
从没听说过子程序集 ...

谢了

出0入0汤圆

 楼主| 发表于 2013-12-29 20:29:43 | 显示全部楼层
kasen_wang 发表于 2013-12-29 20:28
差不多就是一些定义之类的,你可以打开看看

谢谢

出0入0汤圆

发表于 2013-12-29 20:30:28 | 显示全部楼层
把后缀名改为.h就生成了

出0入0汤圆

发表于 2013-12-29 20:48:54 | 显示全部楼层
.H文件不是生成的,是你根据自己想要定义的。只是后罪名为.h,这个文件里主要是放宏定义以及接口函数的。

出0入0汤圆

发表于 2013-12-29 21:04:34 | 显示全部楼层
本帖最后由 1ongquan 于 2013-12-29 21:10 编辑
zhiguangqi 发表于 2013-12-29 20:25
哦,就这么简单啊。那这个.H是不是就是子程序的集合啊?


给你简单总结一下:

一般一个C文件要搭配一个H文件,两者文件名相同,如 UART.c对于UART.h  ,其它函数通过#include"UART.h",来调用UART.c里面定义的函数和变量

H文件里面是对同名的C文件里面内容的声明,C文件必须include同名的头文件,一般C文件需要用到的其它头文件(比如stdio.h),也在H文件里包含,见下面的例子

头文件一般要写成条件包含,这样在重复包含时,编译器自动把已经包含过的文件忽略掉

#ifndef __XXX_H
#define__XXX_H

#include <stdio.h>
.....
#endif

C文件里面写好的函数,要在对于的H文件挂个名,叫其它包含这个H的C文件知道这个函数的存在

H文件就像一个销售部,C文件是生产部,客户了解一个公司的产品都是从销售部了解的,不会关注他是怎么生产的;另一方面,销售部挂的东西,都是根据生产部来的,两个文件的关系基本可以用这个来比喻

C文件里面定义的全局变量要在头文件里面加extern 声明,叫其它包含这个H的C文件知道这里还有个全局变量

H文件里面可以定义宏,什么是宏?  看--> #define  LEDBLINK()  PORTA ^= (1<< LED)        C文件直接使用LEDBLINK();  编译之前会用PORTA ^= (1<< LED) 来进行替换

其它结构体也是要在H里面定义类型,但是必须在C文件里面例化

出0入0汤圆

发表于 2013-12-29 21:11:27 | 显示全部楼层
长得挺好看的

出0入42汤圆

发表于 2013-12-29 21:37:57 | 显示全部楼层
楼上的楼上很详细.  h不实际进入最后的二进制文件, 如果进入了, 说明代码放得不合理.
h负责告诉编译器哪些东西长啥样, 在内存如何分布,哪些东西会在晚些时候链接进来. (链接前就要知道尺寸, 内存分布)

用手敲出来的

出0入0汤圆

发表于 2013-12-29 22:56:53 | 显示全部楼层
撸主的C语言有待提高

出0入0汤圆

发表于 2013-12-29 23:36:22 | 显示全部楼层
自己建个文件,xxx.h,就可以了。

出0入0汤圆

发表于 2013-12-30 09:04:19 | 显示全部楼层
.h未必是手工生成的
甚至于.c都未必是手工生成的
根据某些外部数据自动生成.c,.h是很有可能的事情
不知道大家为什么要强调手工生成的

出0入0汤圆

发表于 2013-12-30 09:18:38 | 显示全部楼层
cc224 发表于 2013-12-30 09:04
.h未必是手工生成的
甚至于.c都未必是手工生成的
根据某些外部数据自动生成.c,.h是很有可能的事情

^^跟你想到一块去了,最近在看linux源码,看到老多自动生成的.h文件

出0入0汤圆

 楼主| 发表于 2013-12-30 09:48:47 | 显示全部楼层
1ongquan 发表于 2013-12-29 21:04
给你简单总结一下:

一般一个C文件要搭配一个H文件,两者文件名相同,如 UART.c对于UART.h  ,其它函数 ...

谢谢啦

出0入0汤圆

 楼主| 发表于 2013-12-30 09:51:31 | 显示全部楼层
bailangcn 发表于 2013-12-29 22:56
撸主的C语言有待提高

我不会呢,学习中

出0入0汤圆

 楼主| 发表于 2013-12-30 09:53:17 | 显示全部楼层

不好意思

出0入0汤圆

发表于 2013-12-30 16:05:16 | 显示全部楼层
头像中的妹纸不错

出0入0汤圆

发表于 2013-12-30 16:16:27 | 显示全部楼层
.h基本分2大类,一类是编译系统自带的,一类是用户代码生成的。

编译系统自带的基本可以在help或者使用手册里找到解析,使用系统资源必需调用其.h

用户代码生成的.h规范一些可以如楼上几位所示,但C语言平台规则比较宽松,在里面放子程序也是可以的。

如果想写比较规范的.h,可以去简单学一点C#或者C++,看他们自动生成代码时候.c  .h 怎么处理的。

出0入0汤圆

发表于 2013-12-30 16:49:42 | 显示全部楼层
我也想说头像不错

出0入0汤圆

发表于 2013-12-30 23:06:55 | 显示全部楼层
我再顶一下头像

出0入0汤圆

 楼主| 发表于 2014-1-11 11:46:51 | 显示全部楼层
yklstudent 发表于 2013-12-30 16:05
头像中的妹纸不错

出0入0汤圆

 楼主| 发表于 2014-1-11 11:47:34 | 显示全部楼层

出0入0汤圆

发表于 2014-1-14 16:40:37 | 显示全部楼层
提问前 please 百度一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 23:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表