C++中#pragma once与#ifndef的区别

2023-11-02

为了避免同一个文件被include 多次,可以使用两种方式:

1、方式一:

        #ifndef _SOMEFILE_H_
        #define _SOMEFILE_H_
       
         ........ //声明语句

        #endif

2、方式二:          

        #pragma once

         ...... //声明语句

两者的区别:

#ifndef方式:

优:

        依赖于宏名字不能冲突,不但保证同一文件不能被包含多次,同时包含内容相同的两个文件不会同时包含。

缺:

        有可能不同的宏名头文件,编译器可能会报出“找不到声明的情况”。

#progma once方式:

优:

        主要指物理上的同一文件不会包含多次,即使文件内容相同,只要文件名不一样就可以。

缺:

        不能保证文件的内容会重复性包含。

防止被重复性包含的原因:

        1、C++语法并不禁止文件的重复包含,重复包含引起的错误是一般是符号(函数、变量、类等)的重定义。

        2、C++在一个文件中,对一个符号只能定义一次(可以声明多次),如果在头文件中包含符号的定义,那么重复包含相当于文件内容重复几遍,定义也就重复几遍,从而引起重定义的错误。

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

C++中#pragma once与#ifndef的区别 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • java 中MongoDB Plugin,MongoKit的使用

    这个属于他人的笔记 觉得挺好 所以存了起来 原文出处 https blog csdn net clm article details 51955332 简介 因为自己工作中会需要用到MongoDB 为了在JAVA上用MongoDB用得更舒服
  • Qt调试

    Locals and Expressions Whenever a program stops under the control of the debugger it retrieves information about the top
  • Unity3D---Vuforia is not enabled解决方案

    在Unity3D实现VR的过程中 需要选择Vuforia官网自己创建的Database中的Target 此时 有的Unity3D会出现如下错误 解决办法如下 选择Edit Project Settings Player 将XR Settin
  • 图像识别小车(jetson nano部分)——电赛学习笔记(3)

    目录 零 前言 1 jetson nano购买商家及技术支持 2 相关环境配置 3 做好系统备份 一 vscode远程ssh操作 局域网连接 二 板载摄像头教程 三 运行例程 四 GPIO使用 GPIO库的API用法 1 导入库 2 引脚编
  • Git 命令行提交代码详细操作

    Git 命令行提交代码操作 安装git后 鼠标右键打开Git Bash 1 查看本地git绑定的用户名和邮箱 git config user name git config user email 2 修改本地git绑定的用户名和邮箱 全局
  • 数据挖掘(知识图谱2019)

    领域 二级分类 三级分类 data mining 数据挖掘 time series analysis 时间序列分析 data streams 数据流 time series data 时间序列数据 real time 实时 time ser
  • Unity之Matrix4x4 矩阵

    Matrix4x4 矩阵 Struct A standard 4x4 transformation matrix 一个标准的4x4变换矩阵 A transformation matrix can perform arbitrary line
  • Qt中关于定时器timerEvent和QTimer

    1 Qt 定时器类 QTimer 在进行窗口程序的处理过程中 经常要周期性的执行某些操作 或者制作一些动画效果 使用定时器类 QTimer 就可以解决 使用 只需创建一个 QTimer 类对象 然后调用其 start 函数开启定时器 此后
  • C#实现多语言切换(通过Resource语言包文件实现)

    点我 下载多语言切换项目最全源码 1 先说说Resources语言包文件是怎么来的 通过Visual Studio 命令提示工具将txt文件转换成resources文件 具体操作 a 打开Visual Studio 命令提示工具 然后输入你
  • EXT2.2 grid行不能复制信息的解决方法

    在ext all js的后面加入如下js if Ext grid GridView prototype templates Ext grid GridView prototype templates Ext grid GridView pr
  • 当下用途最广的计算机语言,目前为止国际上最主流的计算机编程语言是什么?...

    看主流的观察角度 如果是这些语言编写的软件的用户数量最多 那么肯定是C和C 了 因为我们的操作系统 例如WINDOWS IOS LINUX 和核心应用程序 例如OFFICE IE CHROME 以及绝大多数的游戏 几乎全都是C和C 以及少量
  • 除了中国好声音,星空华文冲刺港股IPO还有其他王牌吗?

    回顾国内的综艺节目发展史 中国好声音 曾是里程碑式的存在 曾一度稳坐各大省级卫视综艺节目收视率的头把交椅 更是民间歌手们心中殿堂级的存在 但它背后的制作公司 星空华文似乎却江河日下 5月13日 星空华文再次发起IPO 这一回选择登陆的是港交
  • JSP中,AJAX使用POST方式提交中文乱码问题解决

    本人原创 欢迎转载 转载请保留本人信息 作者 wallimn 电邮 wallimn sohu com 博客 http blog csdn net wallimn 时间 2006 11 15 本人原创 欢迎转载 转载请保留本人信息 今天终于解
  • Python编程:从入门到实践(基础知识)

    第一章 起步 计算机执行源程序的两种方式 编译 一次性执行源代码 生成目标代码 解释 随时需要执行源代码 源代码 采用某种编程语言编写的计算机程序 目标代码 计算机可执行 101010 编程语言分为两类 静态语言 使用编译执行的编程语言 C
  • java.library.path属性在代码中设置不生效问题

    http www blogjava net gembin archive 2008 10 29 237377 html from http daimojingdeyu blogbus com logs 28617218 html 可是在使用
  • 如何用wps制作地图分布图_如何用Power BI制作自己的可视化地图

    作者 AgnesJ 在之前的文章中介绍过Power BI的形状地图 使用形状地图我们可以导入自己想要的任何地图 只要找到对应的TopoJson格式地图文件就可以 但是当我们需要分析某一个销售区域 或服务范围时 如何获取或者创建自己的Json
  • 让div撑满整个屏幕的方法(css)

    在body只有一个div的时候 可以通过这样的方式让div撑满整个屏幕 1 给div设置定位 复习一下 css中position有五种属性 static 默认值 没有定位 absolute 绝对定位 相对于父级元素进行定位 relative
  • aop统一日志输出controller出入参及部分参数

    输出使用的jackson 其中获取iputil放在另一篇文章 gt gt gt gt IpUtil获取ip author cy c date 2022 5 19 16 28 统一日志处理 Component Aspect public cl
  • JTS:04 读取数据库数据

    版本 org locationtech jts jts core 1 19 0 链接 github 数据库 创建数据库方式 postgresql 使用postgis插件 kartoza postgis 15 3 3 使用docker容器 创
  • C++中#pragma once与#ifndef的区别

    为了避免同一个文件被include 多次 可以使用两种方式 1 方式一 ifndef SOMEFILE H define SOMEFILE H 声明语句 endif 2 方式二 pragma once 声明语句 两者的区别 ifndef方式