#program once 和 #ifndef

2023-10-30

#program once 和 #ifndef

在写小demo的时候,注意到vs中会自动生成#program once;看别人写的代码的时候见到比较多的反而是#ifndef—#define—#endif;从字面上看两种方式会产生相同的效果:避免同一个文件重复包含多次,但知道两种方式的本质还是有必要的。

#program once:“同一个文件”指存储在相同位置的文件,即物理位置下相同;当编译器意识到文件存储位置向同事便会跳过“副本文件”,仅仅编译一次该物理位置的文件;但如果发生拷贝情况,便会出现重复包含的情况。

#ifndef–#define—#endif:#ifndef和#define后面是宏定义,这里的宏定义的作用仅仅是为了判断文件是否是同一个文件,即宏名便是我们判断是否是同一个文件的标注,因此,可以按照自己的习惯或者喜好来命名,和头文件名字没有必然联系;但如果有多个头文件,出现同名的几率会大大增加,误判的几率也会提高很多;

#program once较#ifndef出现的晚,部分编译器并不支持这种写法,因此兼容性会较#ifndef差一些,但性能会好一些;

(目前,上文提到的文件,我认为应该仅仅只是头文件)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

#program once 和 #ifndef 的相关文章

  • 获取数组变量的地址是什么意思?

    今天我读到了一段让我很困惑的 C 代码片段 include
  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • 为什么存在 async 关键字

    浏览 msdn 9 频道视频时 我发现以下未答复的评论 希望有人能解释一下 我不明白 async 关键字的意义 为什么不直接允许 任何时候方法返回任务时都会使用await关键字 就像迭代器一样 可以在任何返回 IEnumerable 的方法
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 在 C++ 中将成对向量转换为两个独立向量的最快方法

    假设我有一个vector of pair
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构
  • 带有私有设置器的 EFCore Base 实体模型属性 - 迁移奇怪的行为

    实体模型继承的类内的私有设置器似乎会导致 EFCore 迁移出现奇怪的问题 考虑以下示例 其中有多个类 Bar and Baz 继承自Foo 跑步时Add Migration多次命令 添加 删除private修饰符 生成的模式在多个方面都是
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 服务器的线路有很多

    服务器的线路有很多 大致的分为 CN2 CIA CDIA GIA等 首先简单介绍一下什么是IPLC专线 IPLC专线是国际私用出租线路 本质就是点对点内网 网络的入口在国内 所以不会受 国际链路影响 也不用走国家防火墙 IP地址可用率高 不
  • 怎么在外部类外访问内部类

    在外部类外访问内部类 Wai Nei wn new Wai new Nei 上式相当于 Wai w new Wai Wai Nei wn w new Nei package a class Wai class Nei int i 5 int
  • 【自然语言处理】利用TextRank算法提取关键词

    利用TextRank提取关键词 TextRank 是一种基于 PageRank 的算法 常用于关键词提取和文本摘要 在本文中 我将通过一个关键字提取示例帮助您了解 TextRank 如何工作 并展示 Python 的实现 使用 TextRa
  • MySQL按逗号拆分列为多行

    图一 图二 按逗号拆分列为多行 把 图一 的展示效果转换成 图二 的展示效果 1 创建用户表 sys user CREATE TABLE sys user id BIGINT NOT NULL auto increment COMMENT
  • 工厂方法模式与抽象工厂模式

    工厂方法模式与抽象工厂模式 一 工厂方法模式 Factory Method 解决的问题 案例 实现步骤 代码示例 比较冗余 只是看设计模式的思想 根据案例分析工厂方法模式 JDK源码中的工厂方法模式 二 抽象工厂模式 Abstract Fa
  • (附源码)vue3.0+.NET6实现聊天室(实时聊天SignalR)

    参考文章 搭建文章 gitte源码 在线体验 可以注册两个号来测试 演示图 一 整体介绍 介绍SignalR一种通讯模型Hub 中心模型 或者叫集线器模型 调用这个模型写好的方法 去发送消息 内容有 Hub模型的方法介绍 服务器端代码介绍
  • Webpack详解

    零 文章目录 Webpack详解 1 webpack基本概念 1 webpack是什么 静态模块打包工具 官网 https webpack docschina org 官网文档 https webpack docschina org con
  • selenium 淘宝爬虫(需要扫码登录一下)

    from selenium import webdriver import time import re def gethtml url 定义函数获取html源代码 由于淘宝是动态网页无法用requests库获取所以使用selenium模拟
  • Signature expired

    django 中使用itsdangerous加密时会出现 Signature expired 签名过期的问题 解决办法 expires in设置时间稍微长一点 然后重启pycharm 重新打开项目 比如设置expires in 3600 单
  • AI+林业重塑未来,科技力量守护森林生态宝

    引言 在科技日新月异的时代 人工智能 AI 作为一项崭新的技术 正在革新着我们社会的方方面面 素有 地球之肺 美誉的森林作为人类生存发展中不可或缺的一部分 其管理与保护也开始融入AI技术 催生出了AI 林业这一新兴领域 在AI 林业的浪潮中
  • RT_thread(二)线程的操作

    文章目录 重点 一 线程是什么 二 线程的工作机制 1 线程控制块 2 线程API 1 思维图 2 创建静态线程 3启动线程 4 静态线程脱离 5 创建动态线程 6 动态线程删除 7 使线程让出处理器资源 8 使线程休眠几个节拍 9 线程节
  • Log4j日志记录

    Log4j主要由Loggers 日志记录器 Appenders 输出器 和Layout 日志格式化器 组成 其中Loggers控制日志的输出级别与日志是否输出 Appenders指定日志的输出方式 输出到控制台 文件等 Loyout控制日志
  • 计算机网络03之三种可靠传输机制

    1 停止 等待协议 为什么要有停止 等待协议 答 除了比特出现差错 底层信道还会出现丢包问题 而且为了流量控制 停止 等待协议的原理 答 停止 等待 就是每发完一个分组就停止发送 等待接收端确认 在收到确认后才发送下一个分组 停止 等待协议
  • 网页基本常用标签

    一 标签 元素 1 表示网页的开始 2 网页的头部 3
  • Docker Hub

    Docker Hub是docker的中心仓库 Docker Hub里存储了公共的 Docker 镜像 并且提供服务来帮助你构建和管理你的 Docker 环境 Docker Hub和docker及其组件一起工作 Docker Hub会帮助你和
  • 石头扫地机器人离线了怎么办_关于激光头故障,石头扫地机器人无限次复活记!...

    关于激光头故障 石头扫地机器人无限次复活记 2019 08 17 19 15 41 61点赞 174收藏 82评论 小编注 此篇文章来自即可瓜分10万金币 周边好礼达标就有 邀新任务奖励无上限 点击查看活动详情 创作立场声明 本文记录的是个
  • 【Shell牛客刷题系列】SHELL17 将字段逆序输出文件的每行:巩固awk命令与学习反向列示文件内容的tac命令

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习了反向列示文件内容的命令 tac 这个命令
  • cocos2dx lua 读取json数据

    这里读取的数据是从excel转成json格式的数据 local sData cc FileUtils getInstance getStringFromFile filename local var json decode sData if
  • 基于STM32F103ZET6的RX8025SA时钟电路设计

    1 现在网上大多例程都是关于RX8025T的 带温度补偿的时钟芯片手册 RX8025SA与RX8025T的区别 RX8025T内置高稳定性32 768kHz的DTCXO 数字温度补偿晶体振荡器 可保证在全温度范围内的精度保持在 5ppm R
  • #program once 和 #ifndef

    program once 和 ifndef 在写小demo的时候 注意到vs中会自动生成 program once 看别人写的代码的时候见到比较多的反而是 ifndef define endif 从字面上看两种方式会产生相同的效果 避免同一