2877|3

447

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

请教有关h文件的问题 [复制链接]

看了几个h文件,有一些小疑问,还请高手指点

 

第一种:

#ifndef _UART1_H
#define _UART1_H 1

。。。。。。

#endif

 

第二种:

#ifndef _feed_dog_h
#define _feed_dog_h

。。。。。。

#endif

 

第三种:

#ifndef _nRF905
#define _nRF905

。。。。。

#endif

 

这个ifndef后面跟的是h文件的名称吗,可第三种里的_nRF905不是h文件的名字

 

最好能提供一下h文件的详细格式,谢啦

最新回复

prcxjb答得很形象,这里我补充几点: 1. #ifndef 后面跟的不是头文件名称而是标识符。编译器的预处理分三种,宏定义、头文件包含和条件编译。#ifndef 属于条件编译。 2. #ifndef 的最主要目的是防止头文件的重复包含和编译。例如你的工程有两个.C文件,这两个文件都include了同一个头文件,这个头文件里又定义了全局变量。于是问题来了,大量的声明就会发生冲突。 解决这个问题有2个办法,一是把所有变量定义放在.c文件里,.h文件就只放申明。另一个办法就是用条件编译,防止重复包含。 3. 建议在你写的每一个.H文件里都加上这条语句。至于后面跟的标示符,尽量采用一个固定格式,我个人喜欢用 "__文件名_H__"这种格式,标示专门为头文件使用。 4. #ifndef的另外一种用法是用来定义一些编译参数,比如LCD的显示模式,是横向显示模式还是纵向显示模式。我们可能在多个文件中都会使用,用的时候为了防止漏定义或者定义冲突,就需要用#ifndef这个语句。 4. 后面还加一条建议,我建议每个程序员有时间都多看点编译原理的书。 triton.zhang QQ:906411450  详情 回复 发表于 2012-3-28 22:10
 
点赞 关注

回复
举报

5015

帖子

12

TA的资源

裸片初长成(初级)

沙发
 
这是一些预编译信息,大概的意思是如果定义了某个宏,那就编译或者不编译某段代码。
这一部分跟C语言关于头文件的定义是完全一样的,可以参考下这些预编译信息的用法 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

建议看一下C

有些的确是h头文件,有些不是。例如,在某个厂家提供的驱动里头,你买的是A器件是简化版,厂商给的B器件驱动是全能版,B器件的驱动包含了A器件,但是你如果把B器件的驱动全部包含进你的程序会造成程序臃肿。厂商会在驱动里头用“如果定义了A器件,就包含以下A器件的驱动”来说明驱动的范围。你在主程序里定义一个“我是A器件”,然后包含该驱动,由于前面已经定义了”A器件“,所以会把A器件的驱动编译进去。由于没有定义B器件,就不会把B器件的其他驱动编译进去。
 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

4
 
prcxjb答得很形象,这里我补充几点:
1. #ifndef 后面跟的不是头文件名称而是标识符。编译器的预处理分三种,宏定义、头文件包含和条件编译。#ifndef 属于条件编译。
2. #ifndef 的最主要目的是防止头文件的重复包含和编译。例如你的工程有两个.C文件,这两个文件都include了同一个头文件,这个头文件里又定义了全局变量。于是问题来了,大量的声明就会发生冲突。
解决这个问题有2个办法,一是把所有变量定义放在.c文件里,.h文件就只放申明。另一个办法就是用条件编译,防止重复包含。
3. 建议在你写的每一个.H文件里都加上这条语句。至于后面跟的标示符,尽量采用一个固定格式,我个人喜欢用 "__文件名_H__"这种格式,标示专门为头文件使用。
4. #ifndef的另外一种用法是用来定义一些编译参数,比如LCD的显示模式,是横向显示模式还是纵向显示模式。我们可能在多个文件中都会使用,用的时候为了防止漏定义或者定义冲突,就需要用#ifndef这个语句。

4. 后面还加一条建议,我建议每个程序员有时间都多看点编译原理的书。
triton.zhang
QQ:906411450
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表