#ifndef、#define和#endif

news2024/9/20 17:02:01

#ifndef #define以及#endif 是C/C++中的预处理指令,用于防止头文件(header file)被重复包含(inclusion)导致的编译错误。这种技术通常被称为“头文件保护”或“包含卫士”(Include Guards)。

通俗理解

通俗的方式来解释#ifndef SSH_H#define SSH_H#endif这组预处理指令。

想象一下你正在写一个故事书,这本书里有很多章节,每个章节都描述了不同的场景和角色。但是,你不想让读者重复读到同一个章节的内容,因为这会让故事变得无聊和混乱。

在编程中,头文件(header file)就像是这些章节,它们包含了函数声明、变量定义、宏定义等“故事元素”。当你编写一个大型项目时,可能会在不同的文件中多次包含同一个头文件,这就像是让读者多次读同一个章节一样,会导致问题。

现在,#ifndef SSH_H#define SSH_H#endif就像是你在书中的一个特殊标记,用来确保读者(或编译器)不会重复读到同一个章节(或头文件的内容)。

  • #ifndef SSH_H:这就像是你在章节开始处放了一个标记,上面写着“如果读者还没读过这个章节(即SSH_H这个标记还没被定义),那就让他继续读下去”。

  • #define SSH_H:这表示你已经让读者开始读这个章节了,并且为了防止他再次读到这个章节,你在这章的开头放了一个“已读”标记(即定义了SSH_H)。

  • #endif:这表示章节的结束,以及“已读”标记的范围。从#ifndef#endif之间的内容,只有在章节还没被读过(即SSH_H还没被定义)时,读者才会读到。

所以,当你在编程中看到这样的代码时,就可以理解为:“如果SSH_H这个标记还没被定义(即这个头文件还没被包含过),那么就定义它,并包含这个头文件的内容;如果已经定义过了(即已经包含过了),那么就跳过这部分内容,避免重复包含。”

这样,就可以确保你的项目中每个头文件只被包含一次,避免了重复定义和编译错误。

具体定义

1.#ifndef SSH_H

这行代码的意思是“如果没有定义SSH_H”。#ifndef 是预处理指令 if not defined 的缩写。它检查宏(macro)SSH_H 是否已经定义。如果 SSH_H 没有被定义,那么编译器就会执行紧接着 #ifndef#endif 之间的代码。

2.#define SSH_H

这行代码定义了宏 SSH_H。如果 #ifndef SSH_H 的条件为真(即 SSH_H 没有被定义),那么这行代码就会被执行,SSH_H 宏就会被定义。这样,如果再次包含这个头文件,#ifndef SSH_H 的条件就会为假(因为 SSH_H 已经被定义了),从而避免了头文件内容的重复包含。

3.#endif

这行代码标记了 #ifndef 条件块的结束。它告诉编译器结束检查条件,并继续处理后面的代码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8-对注意力机制模型进行通道剪枝-同时实现涨点和轻量化【附代码】

文章目录 前言视频效果文章概述必要环境一、训练自己的模型1、 训练命令2、 训练参数解析 二、模型剪枝1、 对训练好的模型将进行剪枝2、 剪枝代码详解1.解析命令行参数2. 定义剪枝函数3. 定义剪枝结构4. 更新注意力机制5. 保存更新后的模型6. 主函数 三、剪枝后的训练运行命令…

Windows 11 安装 安卓子系统 (WSA)

How to Install Windows Subsystem for Android (WSA) on Windows 11 新手教程:如何安装Windows 11 安卓子系统 说明 Windows Subsystem for Android 或 WSA 是由 Hyper-V 提供支持的虚拟机,可在 Windows 11 操作系统上运行 Android 应用程序。虽然它需…

c++读取文件时出现中文乱码

原因:UTF-8格式不支持汉字编码 解决:改成ANSI,因为ANSI编码支持汉字编码

生成式人工智能将如何改变网络可访问性

作者:Matthew Adams 受 Be My Eyes 和 OpenAI 启发的一项实验,尝试使用 ChatGPT 4o 实现网页无障碍 在 Elastic,我们肩负着一项使命,不仅要构建最佳的搜索驱动型 AI 平台,还要确保尽可能多的人喜欢使用该平台。我们相…

深入剖析vLLM:大模型计算加速系列之调度器策略探索

原文: 图解大模型计算加速系列:vLLM源码解析2,调度器策略(Scheduler) 目录 收起 前期提要与本期导览 一、入口函数 二、SequenceGroup 2.1 原生输入 2.2 SequenceGroup的作用 2.3 SequenceGroup的结构 三、add_request()&#xff1a…

[python][Anaconda]使用jupyter打开F盘或其他盘文件

jupyter有一个非常不好的体验,就是不能在界面切换到其他盘来打开文件。 使用它,比较死板的操作是要先进入文件目录,再运行jupyter。 以Windows的Anaconda安装了jupyter lab或jupyter notebook为例。 1,先运行Anaconda Prompt 2&…

儿童房间灯哪个牌子的好?几款儿童房间灯具品牌分享

对于视力正处于发育阶段的儿童而言,台灯已不仅仅是一个简单的照明工具。它不仅驱散夜幕下的阴霾,还能为儿童的眼部保驾护航。一款优质的护眼台灯更是不可或缺的守护者。然而,面对市场上琳琅满目的选择,怎样选出一款合适的护眼台灯…

​Stable Diffusion史上最全插件,已打包整理,12个常用插件你肯定用得上!

还在于有丰富的第三方插件,即我们在安装部署之后安装汉化插件的界面 插件安装方式可以是“可下载->加载扩展列表”,然后从列表选择或搜索插件下载,或直接选择“从网站安装”,填写插件的git仓库地址。一般我们从扩展列表搜索即可…

【Python】已解决:pymssql._pymssql.OperationalError 关于关键字‘distinct’的语法错误

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:pymssql._pymssql.OperationalError 关于关键字‘distinct’的语法错误 一、分析问题背景 在使用pymssql库与SQL Server数据库进行交互时,有时会遇到…

WPF在.NET9中的重大更新:Windows 11 主题

在2023年的2月20日,在WPF的讨论区,WPF团队对路线的优先级发起了一次讨论。 对三个事项发起了投票。 第一个是Windows 11 主题 第二个是更新的控件 第三个是可空性注释 最终Windows 11 主题得票最高,WPF团队2023-2024的工作优先级就是Windows…

UE4_材质_水体的反射与折射制作_Ben教程

在这个教程中,将制作水的反射和折射,上个教程,我们主要讲了制作水涟漪(水面波纹)和水滴法线混合,水深计算,我们首先要谈的是反射和产生折射的问题。我们将所有从干扰从场景中分离出去&#xff0…

微信小程序 canvas 处理图片的缩放移动旋转问题

这里使用到了一个插件&#xff0c;canvas-drag&#xff0c;来实现大部分功能的 上效果 直接上代码吧~ wxml <div class"container"><canvas-drag id"canvas-drag" graph"{{graph}}" width"700" height"750" ena…

页面加载503 Service Temporarily Unavailable异常

最近发现网页刷新经常503&#xff0c;加载卡主&#xff0c;刷新页面就正常了。 研究之后发现是页面需要的js文件等加载失败了。 再研究之后发现是nginx配置的问题。 我之前为了解决一个漏洞检测到目标主机可能存在缓慢的HTTP拒绝服务攻击 把nginx的连接设置了很多限制&#…

JSONpath语法怎么用?

JSONPath 可以看作定位目标对象位置的语言&#xff0c;适用于 JSON 文档。 JSONPath 与 JSON 的 关系相当于 XPath 与 XML 的关系&#xff0c; JSONPath 参照 XPath 的路径表达式&#xff0c;提供了描述 JSON 文档层次结构的表达式&#xff0c;通过表达式对目标…

点云处理实操 点云平面拟合

目录 一、什么是平拟合 二、拟合步骤 三、数学原理 1、平面拟合 2、PCA过程 四、代码 一、什么是平拟合 平面拟合是指在三维空间中找到一个平面,使其尽可能接近给定的点云。最小二乘法是一种常用的拟合方法,通过最小化误差平方和来找到最优的拟合平面。 二、拟合步骤…

【Python】已解决:ERROR: No matching distribution found for JPype

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ERROR: No matching distribution found for JPype 一、分析问题背景 在Python开发中&#xff0c;有时我们需要使用Java库来扩展功能或实现某些特定任务。JPype…

有手就行,轻松本地部署 Llama、Qwen 大模型,无需 GPU

用 CPU 也能部署私有化大模型&#xff1f; 对&#xff0c;没错&#xff0c;只要你的电脑有个 8G 内存&#xff0c;你就可以轻松部署 Llama、Gemma、Qwen 等多种开源大模型。 非技术人员&#xff0c;安装 Docker、Docker-compose 很费劲&#xff1f; 不用&#xff0c;这些都不…

方法重载与重写的区别

1.方法重载和重写都是实现多态的方式&#xff0c;区别在于重载是编译时多态&#xff0c;重写是运行时多态。 2.重载是在同一个类中&#xff0c;两个方法的方法名相同&#xff0c;参数列表不同&#xff08;参数类型、顺序、个数&#xff09;&#xff0c;与方法返回值无关&#x…

springboot种草好物app-计算机毕业设计源码13151

摘要 随着电子商务的快速发展和智能手机的普及&#xff0c;越来越多的用户选择通过移动应用程序进行商品浏览、购买和分享体验。种草好物App作为一个专注于商品推荐和购物体验的平台&#xff0c;具有广泛的应用前景和商业价值。本研究旨在构建一个功能丰富、性能稳定的种草好物…

(vue)el-tabs选中最后一项后更新数据后无法展开

(vue)el-tabs选中最后一项后更新数据后无法展开 效果&#xff1a; 原因&#xff1a;选中时绑定的值在数据更新后找不到 思路&#xff1a;更新数据时把选中的v-model的属性赋为初始值 写法&#xff1a; <el-form-item label"字段选择"><el-tabsv-model&qu…