笔记86:关于【#ifndef + #define + #endif】的用法

当你在编写一个头文件(例如 pid_controller.h)时,你可能会在多个源文件中包含它,以便在这些源文件中使用该头文件定义的函数、类或其他声明。如果你在多个源文件中都包含了同一个头文件,那么当你将整个工程统一编译,希望链接成一个完整的可执行文件时,就会出现大量错误,因为每一个相同的头文件都会进行所谓的“重定义”,导致重复定义的错误。

但是如果加上了上面这三句代码,就不会出现重复定义的错误了:

#ifndef PID_CONTROLER_H
#define PID_CONTROLER_H

//在这里写pid_controler.h所需要的具体内容

#endif

作用:

  • #ifndef:检查是否定义了宏PID_CONTROLER_H,如果未定义,那么从#define开始一句句的执行下面的代码块;如果已定义,说明之前已经包含过这个头文件,那么就跳过这个代码块,即直接跳到#endif后面,避免重复定义
  • #define:定义了宏 PID_CONTROLER_H,这样在当前编译单元中就有了一个标记,表示这个头文件已经被包含过了
  • 在#define和#ifndef之间,你可以放置头文件的内容,包括函数声明、类声明等

  • #endif:表示条件编译的结束

因此,当你在其他源文件中包含 pid_controller.h 时,预处理器会首先检查是否已经包含过该头文件。如果之前已经包含过,那么就不会再次包含,这样就避免了重复定义的问题。


注意1:

我们在使用define关键字时经常是这样的:

#define MAX_SIZE 100

MAX_SIZE 是一个宏名,它被定义成一个常量值 100,这意味着,在后续的代码中,每当出现 MAX_SIZE 这个名字,预处理器会将其替换为 100;

但如果是这样的:

#define MAX_SIZE

#define 后面没有跟着一个具体的值时,它实际上是定义了一个宏,但它并没有给这个宏赋予一个特定的值。在这种情况下,它通常用于条件编译,起到一个开关的作用。就是我们介绍的【#ifndef + #define + #endif】所实现的作用;


注意2:

一般我们每个头文件要定义的宏是不能一样的,因此我们在定义的时候,通常使用头文件的名称作为宏,例如:

我的头文件名为pid_controler.h,所以这个头文件所使用的宏被命名为_PID_CONTROLER_H;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/596133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

银行卡实名认证API接口快速对接

银行卡实名认证API接口又叫银行卡核验类API接口、银行卡验证类API接口、银联核验类API接口,根据入参字段不同,分银行卡二要素验证API接口,银行卡三要素验证API接口,银行卡四要素验证API接口。其中,银行卡二要素验证API接口是验证开…

锂电池SOH估计 | Matlab实现基于ALO-SVR模型的锂电池SOH估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池SOH估计 | Matlab实现基于ALO-SVR模型的锂电池SOH估计 蚁狮优化支持向量机锂电池健康状态SOH估计; 具体流程如下; 1、分析锂离子电池老化数据集,从中选取具有代表电池性能衰减…

【自用】了解移动存储卡的基本信息

前言 本文是看B站视频做的一个简单笔记,方便日后自己快速回顾,内容主要介绍了存储卡基本参数,了解卡面上的数字、图标代表的含义。对于日后如何挑选判断一张存储卡的好坏、判别一张存储卡是否合格有一定帮助。 视频参考链接:【硬…

深入剖析Tomcat(六) Tomcat各组件的生命周期控制

Catalina中有很多组件,像上一章提到的四种容器,载入器,映射器等都是一种组件。每个组件在对外提供服务之前都需要有个启动过程;组件在销毁之前,也需要有个关闭过程;例如servlet容器关闭时,需要调…

OpenNJet应用引擎——云原生时代的Web服务新选择

文章目录 OpenNJet应用引擎——云原生时代的Web服务新选择引言:数字化转型的推动力:OpenNJet应用引擎为什么选择OpenNJet? OpenNJet的核心优势1. 云原生功能增强2. 安全加固3. 代码重构与性能优化4. 动态加载机制5. 多样化的产品形态6. 易于集…

产业空间集聚DO指数计算

1.前言 创始人 :Duranton and Overman(2005) 目前应用较多的产业集聚度量指数主要基于两类,一是根据不同空间地理单元中产业经济规模的均衡性进行构造,如空间基尼系数与EG指数;二是基于微观企业地理位置信息形成的产业…

嵌入式系统应用-拓展-FLASH之操作 SFUD (Serial Flash Universal Driver)之KEIL应用

这里已经假设SFUD代码已经移植到工程下面成功了,如果读者对SFUD移植还不了解。可以参考笔者这篇文章:SFUD (Serial Flash Universal Driver)之KEIL移植 这里主要介绍测试和应用 1 硬件设计 这里采用windbond 的W25Q32这款芯片用于SFUD测试。 W25Q32是…

LLM⊗KG范式下的知识图谱问答实现框架思想阅读

分享一张有趣的图,意思是在分类场景下,使用大模型和fasttext的效果,评论也很逗。 这其实背后的逻辑是,在类别众多的分类场景下,尤其是在标注数据量不缺的情况下,大模型的收益是否能够比有监督模型的收益更多…

[渗透利器]全能工具=信息收集->漏洞扫描->EXP调用

前言 hxd开发的工具,大致模块有(信息收集,漏洞扫描,暴力破解,POC/EXP,常用编码) 工具使用 下载后解压 安装环境 pip install -r requirements.txt 注意,该工具继承了两种不同的使…

HTML_CSS学习:定位

一、相对定位 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相对定位</title><style>.outer{width: 500px;background-color: #999ff0;border: 1px solid #000;p…

OpenHarmony实战开发-上传文件

Web组件支持前端页面选择文件上传功能&#xff0c;应用开发者可以使用onShowFileSelector()接口来处理前端页面文件上传的请求。 下面的示例中&#xff0c;当用户在前端页面点击文件上传按钮&#xff0c;应用侧在onShowFileSelector()接口中收到文件上传请求&#xff0c;在此接…

不考408的985,不想考408的有福了!吉林大学计算机考研考情分析

吉林大学&#xff08;Jilin University&#xff09;简称吉大&#xff0c;位于吉林长春&#xff0c;始建于1946年&#xff0c;是中华人民共和国教育部直属的综合性全国重点大学&#xff0c;国家“双一流”、“211工程”、“985工程”、“2011计划”重点建设的著名学府&#xff0…

我是如何带团队从0到1做了AI中台

经历心得 我从18年初就开始带这小团队开始做项目&#xff0c;比如最初的数字广东的协同办公项目&#xff0c;以及粤信签小程序等&#xff0c;所以&#xff0c;在团队管理&#xff0c;人员安排&#xff0c;工作分工&#xff0c;项目拆解等方面都有一定的经验。 19年中旬&#…

基于TL431和CSA的恒压与负压输出

Hello uu们,51去那里玩了呀?该收心回来上班了,嘿嘿! 为什么会有这个命题,因为我的手头只有这些东西如何去实现呢?让我们一起来看电路图吧.电路图如下图1所示 图1:CSA恒压输出电路 图1中,R1给U2提供偏置,Q1给R1提供电流,当U1-VOUT输出大于2.5V时候,U2内部的三极管CE导通,使得…

Kalign 3:大型数据集的多序列比对

之前一直用的是muscle&#xff0c;看到一个文章使用了Kalign&#xff0c;尝试一下吧 安装 wget -c https://github.com/TimoLassmann/kalign/archive/refs/tags/v3.4.0.tar.gz tar -zxvf v3.4.0.tar.gz cd kalign-3.4.0 mkdir build cd build cmake .. make make test su…

JVM之内存分配的详细解析

内存分配 两种方式 不分配内存的对象无法进行其他操作&#xff0c;JVM 为对象分配内存的过程&#xff1a;首先计算对象占用空间大小&#xff0c;接着在堆中划分一块内存给新对象 如果内存规整&#xff0c;使用指针碰撞&#xff08;Bump The Pointer&#xff09;。所有用过的内…

图片四张的时候两个一排 图片三张 五张的时候三个一排 css 如何实现

实现的效果如下图 1、html <view v-if"item.photo_list && item.photo_list.length ! 0" :class"getImageClass(item.photo_list.length)"><view v-for"(j,ind) in item.photo_list" :key"photoind" class"imag…

[python]texthero安装后测试代码

测试环境&#xff1a; anaconda3python3.8 texthero1.1.0 测试代码来自官方&#xff1a;https://github.com/jbesomi/texthero 代码&#xff1a; import texthero as hero import pandas as pddf pd.read_csv("https://gitee.com/FIRC/texthero/raw/master/dataset/…

自动化运维管理工具-------------Ansible

目录 一、自动化运维工具有哪些&#xff1f; 1.1Chef 1.2puppet 1.3Saltstack 二、Ansible介绍 2.1Ansible简介 2.2Ansible特点 2.3Ansible工作原理及流程 2.3.1内部流程 2.3.2外部流程 三、Ansible部署 3.1环境准备 3.2管理端安装 ansible 3.3Ansible相关文件 …

Hibernate 元数据模型(MetaModel)提示类没有找到错误

在进行一次编译的时候&#xff0c;提示下面的错误信息&#xff1a; java: java.lang.ClassNotFoundException: org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor 问题和解决 如果你对 Hibernate 的元数据还是不非常了解的话&#xff0c;请参考文章&#xff1a; JPA 的…