pragma once与ifndef的区别

news2024/9/24 3:19:19

概要

代码编译过程中,为了防止同一份代码被重复引用,通常有两种实现方式

方式一

#pragma once

方式二

#ifndef _TEST_H_

#define _TEST_H_

#endif // !TEST_H

通常情况下,使用上述两种方式中的任意一种都是可以的。最近工作中,代码按照其功能性被划分出不同的模块,这时二者的区别就体现出来了。

模块依赖图

  • Submodule1和submodule2是两个独立的模块,相互见不可见
  • 两个模块均存在同一个接口文件(Interface B)
  • Class E同时依赖Submodule1和submodule2

实验

如果在Interface B文件中,使用pragma once,在编译环节会有如下的报错:

error: redefinition of 'XXX'     // Interface B文件中实现的一个数据结构

struct XXX{

但是使用ifndef不会报错,且代码运行符合预期。

区别

pragma once只是保证同一个文件不会被引用两次,但是对于不同的文件(即时文件名和内部实现完全一致),该语法是不生效的。

Ifndef其实是定义一个宏,即时在不同的文件中出现相同的宏名,它也有排他性。

链接的问题

由于submodule1和submodule2是分开编译的,因此编译出的静态库文件均包含了类xxx的实现。在编译外部的可执行目标class E的过程中,无疑它也包含了类xxx的实现。当这三部分进行链接时,肯定是存在重复的部分的。与编译器不同的是,链接器它能通过symbol的名称进行排重(只会选取一个),因此不再报错。

参考文献

  1. C++学习笔记之pragma once的理解_pragma once什么意思-CSDN博客
  2. https://www.cnblogs.com/math/p/how_to_resolve_multi_define_symbols.html

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

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

相关文章

阿里云ECS服务器的搭建学习

云服务器ECS: 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备&a…

直线模组有哪些配件组成的?

直线模组又称线性模组或线性滑台,是自动化设备中重要的传动元件,主要由以下几部分组成: 1、直线导轨:直线导轨又称线性滑轨,是用于直线往复运动场合的重要零部件,它具有比直线轴承更高的额定负载&#xff0…

吉利高端品牌领克汽车携手体验家,重塑智能创新的汽车服务体验

浙江吉利控股集团(以下简称“吉利集团”)始建于1986年,1997年进入汽车行业,一直专注实业,专注技术创新和人才培养,坚定不移地推动企业转型升级和可持续发展。现资产总值超5100亿元,员工总数超过…

【内网击穿工具 】NATAPP

内网穿透又叫内网映射,功能是把内网IP映射到公网,使公网也能轻松访问所搭建的服务。 内网与外网 外网指的是一个组织或网络中可公开访问的网络,即对外开放的网络。外网可以通过公共互联网进行访问 内网是相对于外网而言的,指的…

十四、Django框架使用

目录 一、框架简介二、MVT模型简介三、Python的虚拟环境3.1 安装virtualenv 虚拟环境3.2 创建和使用虚拟环境四、Django项目的搭建4.1 安装Django包4.2 创建Django项目4.3 创建Django项目的应用4.4 使用pycharm打开Django项目4.5 注册Django项目的应用4.6 启动Django项目五、OR…

Guava-RateLimiter详解

简介: 常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取令牌,只有取到令牌的请…

聚观早报 | 荣耀Play8T上市;阿芙“超级品牌日”上线

【聚观365】10月19日消息 荣耀Play8T上市 阿芙“超级品牌日”上线 特斯拉家庭充电服务包更新 TikTok Shop印尼站关停 高通与谷歌合作开发RISC-V芯片 荣耀Play8T上市 3月28日,荣耀推出了荣耀Play 7T系列手机,其最大的卖点就是搭载了6000mAh大电池&a…

`SQL`编写判断是否为工作日函数编写

SQL编写判断是否为工作日函数编写 最近的自己在写一些功能,遇到了对于工作日的判断,我就看了看sql,来吧!~(最近就是好疲惫) 我们一起看看(针对ORACLE) 1.声明: CREATE OR REPLACE PACKAGE GZYW_2109_1214.PKG_FUN_GETDAY_HDAY AS /** * 通过节假日代码获取指定的日期[查找基…

开发小经验积累

今天使用langchain官方文档上的这个包的时候 遇到了这个报错 这个直觉判断肯定是版本问题,我先是去perplexity.ai搜了相关报错 后来没找到什么比较好的回答 这时候想到可以去看当前自己用的版本的langchain的源码,而利用vscode强大的功能,…

linux java 环境变量配置

前提已经存在jdk部署包,并且上传到服务器上 编辑:/etc/profile export JAVA_HOME/home/jdk1.8.0_211/ export JRE_HOME/home/jdk1.8.0_211/jre/ export PATH$JAVA_HOME/bin:$JRE_HOME/bin:$PATH编辑位置: 之后source /etc/profile 查看java…

JDK API

Application Programming Interface 字符串、集合、文件、输入输出、网络、多线程 文档注释 文档注释是功能级注释,用来说明一个类,一个方法或一个常量的,因此只在上述三个地方使用。 文档注释可以使用Java自带的命令javaDoc来对这个类生成手…

写给正在互联网经历孤独和迷茫的你

这篇文章写给正在互联网上经历孤独和迷茫,失去信心和希望的人们。 最近有不少公众号粉丝跟我倒苦水,问这两年互联网怎么这么难,干啥啥不成,都快对互联网完全失去信心了。童话觉得为了大家的心病专门来开开方子很有必要&#xff0c…

第六节:Word中对象的层次结构

《VBA之Word应用》(10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后通过实例让…

AI智能分析视频监控系统如何助力智慧民宿规范化、安全最大化?

民宿智能监控系统是一种便捷而有效的安全解决方案,它可以提供全面的监控和保护民宿的功能。以下为具体方案: 1、视频监控 安装高清摄像头覆盖民宿的关键区域,如大门、入口、走廊和共用区域等。这些摄像头可以实时监控,记录入住和…

element-plus 表格-自定义样式实现2

<template><h2>表格修改样式利用属性修改</h2><h3>row-style 行样式</h3><h3>row-style header-row-style 不能改背景色</h3><h3>cell-style header-cell-style能改背景色</h3><el-tableref"tableRef":dat…

面向教育行业的身份和访问管理(IAM)解决方案

教育机构面临着严峻的挑战&#xff0c;不仅要管理不同的用户角色&#xff08;如教职员工、学生和非教学人员&#xff09;&#xff0c;还要管理具有多个角色的用户&#xff0c;这些角色的动态性质使预配过程进一步复杂化&#xff0c;此外&#xff0c;随着离线课程的增加&#xf…

AI机器人客服:模拟真人的工作场景揭秘

随着科技的高速发展&#xff0c;人工智能技术应用越来越广泛&#xff0c;在客服行业&#xff0c;AI机器人客服正逐渐成为企业与客户之间沟通和服务的主要方式。与传统的机器人客服相比&#xff0c;AI机器人客服更加智能、灵活&#xff0c;并且能够以模拟真人的方式与客户进行交…

【完美世界】最新预告,石昊辣手摧花,两大强者对决,云曦终于霸气一回

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 热血动漫《完美世界》第134集预告已经更新了&#xff0c;这一集看点十足。 首先&#xff0c;石昊在预告中展示了他辣手摧花的实力。为了保护云曦&#xff0c;他不得不与来自战族的敌人战斗。 战族美女和她的同…

【网络安全 --- xss-labs靶场】xss-labs靶场安装详细教程,让你巩固对xss漏洞的理解及绕过技巧和方法(提供资源)

一&#xff0c;资源下载准备 1-1 VMware 16.0 安装请参考以下博客&#xff0c;若已经安装请忽略&#xff1a; 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;…

IDC:到2027年,全球生成式AI支出将达到1430亿美元

全球著名信息调查咨询机构IDC在官网公布了一项调查&#xff0c;到2027年&#xff0c;全球生成式AI&#xff08;Generative AI&#xff0c;简称Gen AI&#xff09;支出将达到1430亿美元&#xff0c;5年复合年增长率为73.3%。 该支出包括&#xff1a;生成式AI的软件以及相关基础…