请教有关h文件的问题

2019-03-24 14:42发布

看了几个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文件的详细格式,谢啦 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
wstt
1楼-- · 2019-03-24 22:22
 精彩回答 2  元偷偷看……
prcxjb
2楼-- · 2019-03-24 22:25
< :TI_MSP430_内容页_SA7 --> 有些的确是h头文件,有些不是。例如,在某个厂家提供的驱动里头,你买的是A器件是简化版,厂商给的B器件驱动是全能版,B器件的驱动包含了A器件,但是你如果把B器件的驱动全部包含进你的程序会造成程序臃肿。厂商会在驱动里头用“如果定义了A器件,就包含以下A器件的驱动”来说明驱动的范围。你在主程序里定义一个“我是A器件”,然后包含该驱动,由于前面已经定义了”A器件“,所以会把A器件的驱动编译进去。由于没有定义B器件,就不会把B器件的其他驱动编译进去。
Triton.zhang
3楼-- · 2019-03-25 01:54
prcxjb答得很形象,这里我补充几点:
1. #ifndef 后面跟的不是头文件名称而是标识符。编译器的预处理分三种,宏定义、头文件包含和条件编译。#ifndef 属于条件编译。
2. #ifndef 的最主要目的是防止头文件的重复包含和编译。例如你的工程有两个.C文件,这两个文件都include了同一个头文件,这个头文件里又定义了全局变量。于是问题来了,大量的声明就会发生冲突。
解决这个问题有2个办法,一是把所有变量定义放在.c文件里,.h文件就只放申明。另一个办法就是用条件编译,防止重复包含。
3. 建议在你写的每一个.H文件里都加上这条语句。至于后面跟的标示符,尽量采用一个固定格式,我个人喜欢用 "__文件名_H__"这种格式,标示专门为头文件使用。
4. #ifndef的另外一种用法是用来定义一些编译参数,比如LCD的显示模式,是横向显示模式还是纵向显示模式。我们可能在多个文件中都会使用,用的时候为了防止漏定义或者定义冲突,就需要用#ifndef这个语句。

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

一周热门 更多>

相关问题

    相关文章