历史上的今天
返回首页

历史上的今天

今天是:2025年05月06日(星期二)

正在发生

2018年05月06日 | 单片机C语言头文件 #ifndef/#define/#endif使用详解

2018-05-06 来源:eefocus

想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?


其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用。


头文件被重复引用引起的后果:

有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。
有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。


是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?


答案:不是一定要加,但是不管怎样,用ifnde xxx #define xxx#endif或者其他方式避免头文件重复包含,只有好处没有坏处。个人觉得培养一个好的编程习惯是学习编程的一个重要分支。


    下面给一个#ifndef/#define/#endif的格式:

    #ifndef A_H意思是"if not define a.h"  如果不存在a.h

    接着的语句应该#define A_H  就引入a.h

    最后一句应该写#endif   否则不需要引入

--------------------------------------------------------------------------------------------------
#ifndef GRAPHICS_H // 防止graphics.h被重复引用 
#define GRAPHICS_H 


#include // 引用标准库的头文件 
… 
#include “header.h” // 引用非标准库的头文件 
… 
void Function1(…); // 全局函数声明 
… 
class Box // 类结构声明 

… 
}; 
#endif
--------------------------------------------------------------------------------------------------


推荐阅读

史海拾趣

千志电子(CCO)公司的发展小趣事

千志电子于1986年由董事长陈初志先生在台湾创立,起初专注于生产各类型插件式电阻。随着业务的不断发展,公司意识到拓展更广阔市场的重要性。1996年,千志电子进军中国市场,在深圳设立了千志电子(深圳)有限公司,这一举措标志着公司开始走向国际化。深圳作为中国改革开放的前沿阵地,为千志电子提供了丰富的资源和广阔的市场空间,为其后续的发展奠定了坚实基础。

Amveco Toroidal Power Products公司的发展小趣事

Amveco Toroidal Power Products公司成立于XXXX年,初始阶段主要专注于环形变压器的研发与生产。创始人凭借对环形变压器技术的深入了解和市场需求的敏锐洞察,带领团队克服了初创期的种种困难,成功开发出了具有高效能、低噪音特点的环形变压器产品,并赢得了客户的初步认可。随着市场口碑的逐渐积累,公司的业务规模开始稳步扩大。

GHI Electronics公司的发展小趣事

为了满足不同客户的多样化需求,GHI Electronics不断拓展其产品线。除了传统的电子元件和模块外,公司还开始涉足智能家居、物联网等新兴领域。通过不断引入新技术、新产品,GHI Electronics成功实现了从单一产品向多元化产品线的转变。这种转变不仅丰富了公司的产品线结构,也提高了公司的综合竞争力。

Connector City公司的发展小趣事

随着全球环保意识的不断提高,电子行业对绿色环保的要求也越来越高。Connector City公司积极响应国家环保政策,加强了对生产过程的环保管理。公司引进了先进的环保设备和技术,减少了生产过程中的废弃物排放和能源消耗。同时,公司还注重产品的环保性能设计,推出了多款符合环保标准的新型连接器产品。通过坚持绿色环保和可持续发展理念,公司赢得了社会的广泛赞誉和支持。

这五个故事仅是对Connector City公司可能发展路径的一种虚构描述,实际情况可能因市场变化、公司策略调整等多种因素而有所不同。在实际发展中,公司需要根据自身情况和市场环境做出灵活的调整和决策。

顺芯(Everest-semi)公司的发展小趣事

在技术创新的同时,顺芯公司也注重市场拓展和品牌建立。公司积极参加国内外各类展会和论坛,与潜在客户和合作伙伴建立了广泛的联系。同时,顺芯公司还加强了与渠道商的合作,提高了产品的市场覆盖率。通过一系列的市场推广活动,顺芯公司的品牌知名度和美誉度逐渐提升。

恒连电子(EVERCOM)公司的发展小趣事

恒连电子一直将品质管理和客户服务作为公司发展的生命线。公司建立了严格的质量管理体系和完善的售后服务体系,确保产品的品质和服务的质量。在品质管理方面,公司从原材料采购到产品生产的每一个环节都进行严格把控,确保产品的稳定性和可靠性。在客户服务方面,公司秉承“客户至上”的服务理念,为客户提供全方位、个性化的服务支持。通过优质的服务赢得了客户的信任和好评。

问答坊 | AI 解惑

传感器基本知识

一、传感器的定义      国家标准GB7665-87对传感器下的定义是:“能感受规定的被测量并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成”。传感器是一种检测装置,能感受到被测量的信息,并能将检测感受到的信息, ...…

查看全部问答>

[求助]关于操作数码管位闪烁的问题

我现在的电路是一个4位的数码管,四个按键(左移…

查看全部问答>

关于硬盘选购

缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速 ...…

查看全部问答>

如何获取字模偏移量???

int GetGBKCode_from_sd(unsigned char* pBuffer,unsigned char * c) {     unsigned char High8bit,Low8bit;      unsigned int pos;      High8bit=*c;     /* 取 ...…

查看全部问答>

2013年国内电子元器件分销展望 

本帖最后由 jameswangsynnex 于 2015-3-3 20:05 编辑 2012年国内整个电子元器件分销行业整体行情不景气。很多日系芯片原厂亏损裁员,很多美系芯片不断调整业务重点,台湾芯片原厂也是不断合并,电子元器件授权代理商整体业绩一般化。大家普遍认为 ...…

查看全部问答>

基于TRIZ的创新设计

基于TRIZ的创新设计…

查看全部问答>

ST-LINK USB WINDOES驱动

ST-LINK USB  WINDOES驱动…

查看全部问答>

点对点对等网络实验中遇到的问题

今天拿来TI的例程simple_Peer_to_Peer.做点对点对等网络实验,将LinkTo.c和LinkListen.c程序分别下载给两个ED后。 talker上电后,红绿LED同时点亮,按下按键s1\\s2中任意一个,红绿LED同时闪烁,进入发送link广播帧 状态; listener上电 ...…

查看全部问答>

红色部分是我的问题,为什么加那句话

内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 // ...…

查看全部问答>

IAR6.40.2编译msp430fr5969.h文件报错

最近下载了一个外国人写的程序,发现是MSP430的,于是安装了IAR编译,结果出了100多个错,大部分是msp430fr5969.h的。想不通官方的文件怎么会出错,现上传代码,麻烦哪位高手看下。 谢谢 …

查看全部问答>