想必很多人都看过“头文件中的 #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
--------------------------------------------------------------------------------------------------
关键字:单片机 C语言 头文件
引用地址:
单片机C语言头文件 #ifndef/#define/#endif使用详解
推荐阅读最新更新时间:2024-03-16 16:01
51单片机访问大容量存储器的实现
1 引言 MCS-51系列单片机有着优越的性价比,因此应用面宽,使用量也非常大;然而它只有16位地址线,最大能访问的存储空间为64K,且扩展接口与存储器统一编址,扩展接口会占用大量的地址空间,致使该系列单片机在数据量大的数据采集系统中,存储空间明显不足。 笔者最近在开发一数据采集系统时,经分析、探索,找到了解决的办法。 2 使用大容量存储器的原理 2.1 使扩展接口不占用单片机的存储地址空间 由于MCS-51单片机的扩展接口与存储器统一编址,采用常规的方法扩展接口时会占用大量的地址空间,而多数应用系统均会要求扩展接口(本例有七段LED的段输出口、位输出口、键盘口各一个),为此,使扩展接口不占用单片机的存储地址空间对于要
[单片机]
单片机控制16x16点阵显示姓名
单片机源程序如下: #include reg51.h #define uchar unsigned char #define uint unsigned int #define Lie P1 sbit SHCP = P2^0; sbit DS = P2^1; sbit STCP = P2^2; uchar code led ={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xFE,0xFF,0x22,0x04,0x5A,0x08,0x86,0x07,0x08,0x20,
[单片机]
Maxim发布基于ARM Cortex-M4F内核的超低功耗微控制器系列
微型封装MAX32630和MAX32631可提供快速处理,同时延长电池寿命 中国,北京—2016年11月15日—Maxim推出基于ARM® Cortex®-M4F内核的MAX32630和MAX32631微控制器,可帮助设计者轻松开发高性能健身与医疗可穿戴设备。 随着个人健身和医疗可穿戴应用的快速增长,市场对设备内部的电子元器件也提出了复杂的新要求。这些器件必须尺寸很小,又同时具备高级的功能、处理性能以及最佳的集成外设。此外,器件还须在各种工作模式下同时实现高精度、低噪声与极低功耗,从而确保单次充电即可实现足够长的工作时间。Maxim最新推出的MAX32630和MAX32631微控制器拥有丰富和强大的功能,可以轻松解决上述难题。 M
[单片机]
基于ARM的可定制MCU可替代FPGA
如今的产品生命周期可能短至六个月,因此在这种情况下要想取得定制ASIC的低成本、低功耗和高性能优势几乎是不可能的。定制ASIC的设计周期通常要一年左右,这通常要比终端产品的生命周期还要长。另外,标准单元ASIC还具有NRE费用(非重复工程成本),对于基本的0.13微米设计,该成本约为30万美元,而对于具有复杂IP内容的90nm设计将超过100万美元。因而当每年的批量小于10万片时,从经济角度看就不具有可行性。 为此人们研发出了平台化或结构化ASIC,它们具有预设计的IP块和可编程的ASIC门,可显著降低成本并缩短设计周期。这种方案将设计周期从一年甚至更长的时间缩短到几个月,还将NRE成本降低到大约15万美元,不过与门阵列
[单片机]
Microchip宣布推出全新单片机系列
全新单片机采用独立于内核的外设实现闭环数字控制和安全监测,新增的外设集成通过硬件PID、相位角测量和100 mA电流驱动实现高级功能控制。 全球领先的整合单片机、混合信号、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)近日在德国慕尼黑电子展上宣布推出多外设、低引脚数的PIC16(L)F161X系列,拓展其8位PIC®单片机产品线。全新的单片机引入并扩展了Microchip独立于内核的外设(CIP)。这些CIP均具备低功耗的特性,不仅缩短中断延迟,提升系统的效率和安全性,而且最大限度地降低了设计时间和投入。这些外设无需额外代码和外部组件,大大降低了系统的复
[单片机]
基于单片机的智能电话报警系统
1 引言 随着人们生活水平的不断提高,家庭安全正在逐渐引起重视。在家庭住宅处安装防盗及险情报警系统,使主人能及时掌握住宅发生的警情,正是人们所期盼的。智能电话报警系统是以单片机为核心,利用公共通讯网为传输媒介对住宅进行安全监视,具有可靠性高、成本低、易普及等优点。 2 系统功能 智能电话报警系统实现的主要功能如下:当室内有警情发生时(如有人非法进入室内、煤气泄漏、火灾等),智能电话报警系统能及时地通过各种传感器获知警情,对警情的种类进行判断,并立即自动顺序拨打预设的1~9组电话。在拨号后,首先判断对方是否摘机。如是,则根据不同的警情播放相应的录制好的语音报警内容,否则,挂机后拨下一组预制电话,直至1~9组电话全部接通。 3
[应用]
IC Insights:单片机出货量激增但单价下降较快
日前,市调机构IC Insights的报告指出,借助物联网相关新产品的开发,微控制器销量有了略微增加,但却遭遇到罕见的价格大幅下滑。 根据IC Insight的报告,单片机年出货量增长33%,达到了254亿颗,总收入仅增长4%至166亿美元。 IC Insights分析师Rob Lineback表示,单价下滑主要原因是32位市场的竞争激烈,供货商企图通过价格战的方式快速进军物联网市场。 Lineback称 物联网的传感器及通信功能的总成本要控制在3/4美元之间,因此对供应商来说要压低32位MCU的单价。 IC Insights预计MCU 单价将进一步下降,今年底预计降幅21%至65美分,明年
[单片机]
基于51单片机的锅炉水位温度压力检测系统仿真设计
仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0056 1.主要功能: 基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用) 1.系统实时通过LCD1602显示水位检测值,锅炉炉膛温度值,锅炉内部压力值。 2、可对锅炉的水位上下限、炉膛温度上下限、压力上下限进行设置,第一行显示上限值,第二行显示下限值。 3、如果水位、温度、压力过限则蜂鸣器报警,通过LED指示报警类型。 4、默认水位下限值10cm,上限值40cm,压力下限值30kPa,压力上限值50kPa,温度下限值5℃,温度上限值105℃。 5、温
[单片机]