C++之#pragma once实例总结(二百四十七)

news2024/11/20 8:48:56

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之#pragma once用法总结。

2.#pragma once介绍

  • #pragma once是一种预处理指令,用于告诉编译器在编译过程中只包含一次特定的头文件。它是一种非标准的C++语言扩展,主要用于避免头文件被重复包含。

  • 在C++中,头文件经常被用来包含代码的声明或定义,然后在其他源文件中进行引用。当多个源文件都包含同一个头文件时,如果没有适当的预处理指令,会导致重复定义和编译错误。

  • #pragma once指令的作用是在编译过程中检查指定的头文件是否已经被包含,如果已经包含则忽略后续的包含操作,避免重复定义和编译错误的发生。

  • 需要注意的是,虽然#pragma once是许多编译器所支持的常见特性,但它并不是C++标准的一部分,因此在使用时需要注意编译器的兼容性。

  • 总结起来,#pragma once是一种用于避免头文件重复包含的预处理指令,它可以简化代码的组织和管理,提高编译效率。

3.代码实例

1.包含 A.h 和 B.h:

// main.cpp
#include "A.h"
#include "B.h"

int main() {
    // to do....
    return 0;
}

2. 在同一个源文件中多次包含同一个头文件 A.h:

#include "A.h"
#include "A.h"  // #pragma once 确保 A.h 只被编译一次

int main() {
    // 主程序代码
    return 0;
}

3.A.h 头文件内部包含其他头文件:

// A.h
#pragma once

#include "B.h"
#include "C.h"

// A.h 头文件的内容

4.带有条件编译的头文件 A.h:

// A.h
#pragma once

#ifdef DEBUG
// 在调试模式下执行的代码
#endif

// A.h 头文件的内容

5.使用 #pragma once 防止重复定义类:

// MyClass.h
#pragma once

class MyClass {
  public:
    MyClass() {
        // 构造函数
    }

    void DoSomething() {
        // 类的成员函数
    }
};

int main() {
    MyClass obj;
    obj.DoSomething();

    return 0;
}

6.使用 #pragma once 防止重复定义宏:

// Constants.h
#pragma once

#define PI 3.1415926

int main() {
    // 使用宏定义的值
    double radius = 5.0;
    double area = PI * radius * radius;

    return 0;
}

7.使用 #pragma once 防止重复包含模板类:

// TemplateClass.h
#pragma once

template <typename T>
class TemplateClass {
  public:
    T Add(T a, T b) {
        return a + b;
    }
};

int main() {
    TemplateClass<int> obj;
    int sum = obj.Add(5, 10);

    return 0;
}

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

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

相关文章

uniapp-微信授权登录

对于制作这个demo的时候是可以使用的&#xff0c;如果不能使用勿喷&#xff0c;如有问题评论区讨论&#xff0c;谢谢大家&#xff01; 目录 ​编辑 前言 完整代码以及注释、使用方法 用法 解析 前言 在移动应用开发中&#xff0c;提供第三方登录是一种常见的用户认证方式…

Android Studio Logcat日志VIVO手机显示*号问题

咨询VIVO客服 1、拨盘输入 *#06# 获取串码&#xff0c;发送给客服 2、拨号盘输入*#*#112#*#*-右上角菜单-更多-一键授权 注意不要刷机&#xff0c;恢复出厂设置&#xff0c;手动取消授权哦

【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表e. 压缩稀疏行&#xff08;Compressed Sparse Row&#xff0c;CSR&#xff09;矩阵结构体创建CSR矩阵元素设置初始化打印矩阵销毁…

位图算法经典剖析(未完)

第一题 只出现一次的数字|| 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { publ…

35二叉树-树的最小深度

目录 LeetCode之路——111. 二叉树的最小深度 分析 解法一&#xff1a;广度优先查询 解法二&#xff1a;深度优先查询 LeetCode之路——111. 二叉树的最小深度 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…

基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

前言&#xff1a;本文为手把手教学ESP8266著名开源项目——太空人WiFi天气时钟&#xff0c;不同的是本次项目采用的是STM32作为MCU。两者开发过程中有因为各自芯片的特点&#xff08;时钟频率&#xff0c;内存大小等&#xff09;&#xff0c;导致开发程序大不相同&#xff0c;很…

Redis 持久化配置,RDB和AOF方式配置说明

文章目录 一、概述二、RDB 持久化方式配置三、AOF 持久化方式配置 如果您对Redis的了解不够深入请关注本栏目&#xff0c;本栏目包括Redis安装&#xff0c;Redis配置文件说明&#xff0c;Redis命令和数据类型说明。 一、概述 Redis 持久化是指将 Redis 数据存储到磁盘上&#x…

KVM实验之动态迁移

前言 一台NFS&#xff08;192.168.184.132&#xff09; 一台KVM-a&#xff08;192.168.184.133&#xff09; 一台KVM-b&#xff08;192.168.184.134&#xff09; NFS配置&#xff1a; [rootlocalhost ~]# setenforce 0 //关闭selinux [rootlocalhost ~]# service iptables st…

python re 匹配所有字段名称相同的值

import retext {"code": 200,"message": "success","traceId": "da0b668c-4d67-44bf-907f-c072fc63839a","data": {"list": [{"articleId": 121862102,"title": "python 目录…

k8s 金丝雀发布与声明式管理

Deployment控制器支持自定义控制更新过程中的滚动节奏&#xff0c;如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程&#xff0c;此时&#xff0c;仅存在一部分新版本的应用&#xff0c;主体部分还是旧的版本。然后&#xf…

用图说话——流程图进阶

目录 一、基本流程图 二、时序流程图 一、基本流程图 经常阅读歪果仁绘制的流程图&#xff0c;感觉比较规范&#xff0c;自己在工作中也尝试用他们思维来绘图&#xff0c;这是一个小栗子&#xff1a; 二、时序流程图 在进行Detail设计过程中&#xff0c;一般的绘图软件显得…

微信小程序笔记功能(富文本editor功能)开发

一、效果图展示 模拟器及pc 端效果图 手机端就不贴了 二、把官方示例copy到自己的项目传送门 三、改一改上传图片功能 insertImage() {const that thiswx.chooseImage({// count:1 一次选择图片的个数success: function (response) {// 多张图片上传response.tempFilePaths…

基于opencv的selenium滑动验证码的实现

这篇文章主要介绍了基于opencv的selenium滑动验证码的实现&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 基于selenium进行动作链 由于最近很多人聊到滑动验证码…

Python通过pyecharts对爬虫房地产数据进行数据可视化分析(一)

一、背景 对Python通过代理使用多线程爬取安居客二手房数据&#xff08;二&#xff09;中爬取的房地产数据进行数据分析与可视化展示 我们爬取到的房产数据&#xff0c;主要是武汉二手房的房源信息&#xff0c;主要包括了待售房源的户型、面积、朝向、楼层、建筑年份、小区名称…

图像去噪滤波算法汇总(Python)

前言 上篇文章&#xff1a;图像数据噪音种类以及Python生成对应噪音&#xff0c;汇总了常见的图片噪音以及噪音生成方法&#xff0c;主要用在数据增强上面&#xff0c;作为数据集填充的方式&#xff0c;可以避免模型过拟合。想要了解图像数据增强算法的可以去看本人所撰这篇文…

IO,库-10.24.25

库-10.24.25 一、概念 头文件&#xff1a;.h&#xff1a;函数声明&#xff0c;结构体定义&#xff0c;宏定义&#xff0c;外部引用&#xff0c;重定义&#xff0c;条件编译 #include <>:从系统路径&#xff08;/usr/include&#xff09;下查找 #include " "&am…

如何将Mysql数据库的表导出并导入到另外的架构

如何将Mysql数据库的表导出并导入到另外的架构 准备一、解决方法1.右键->导出->用mysqldump导出2.注意路径一般为&#xff1a;C:/Program Files/MySQL/MySQL Server 8.0/bin/mysqldump.exe和导出的sql文件位置3.右键->SQL脚本->运行SQL脚本4.找到SQL脚本并点击确定…

[moeCTF 2023] REV

逆向这东西&#xff0c;不太好说。 base64 这是个pyc文件&#xff08;python编译后的字节码文件&#xff09;&#xff0c;这东西可以直接用各种方法反编译。也可以不弄&#xff0c;必竟这应该签到级别的。用notepad打开&#xff0c;可以看到base64的编译和两个码表。显然猜是…

mac系统u盘启动盘制作教程,更新至macOS Sonoma 14

mac系统怎么制作装系统的u盘,如果您要在多台电脑上安装 macOS&#xff0c;而又不想每次都下载安装器&#xff0c;这时可引导安装器就会很有用。一起来看苹果电脑u盘启动盘制作教程吧。 Macos系统安装包合集包揽macos 10.15&#xff0c;macos 11和苹果最新系统等多个版本 1、A…

Windows 和 Linux 这2个系统在进行编程实现的时候的一些区别:

很惭愧&#xff0c;学了很多年才意识到&#xff0c;噢&#xff0c;原来这两个系统实现一些功能的时候会使用到不同的库&#xff0c;使用不同的函数。 那么&#xff0c;也会延伸出一些问题&#xff1a; 比如&#xff0c;如何实现版本的迁移。一个在Linux上运行的代码如何可以比…