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


    简介: 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    #include "A.h"
    #include "A.h"  // #pragma once 确保 A.h 只被编译一次
    
    int main() {
        // 主程序代码
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    // A.h
    #pragma once
    
    #include "B.h"
    #include "C.h"
    
    // A.h 头文件的内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    // A.h
    #pragma once
    
    #ifdef DEBUG
    // 在调试模式下执行的代码
    #endif
    
    // A.h 头文件的内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    // MyClass.h
    #pragma once
    
    class MyClass {
      public:
        MyClass() {
            // 构造函数
        }
    
        void DoSomething() {
            // 类的成员函数
        }
    };
    
    int main() {
        MyClass obj;
        obj.DoSomething();
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

    // Constants.h
    #pragma once
    
    #define PI 3.1415926
    
    int main() {
        // 使用宏定义的值
        double radius = 5.0;
        double area = PI * radius * radius;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    基于JavaSwing开发简单的学生信息管理系统(增删改查SQLServer数据库)+报告
    管理类联考——数学——汇总篇——知识点突破——数据分析——1. 计数原理——排列组合——公式
    04_一个字符串是否包含多个子字符串判断
    面试突击87:说一下 Spring 事务传播机制?
    山东大学单片机原理与应用实验 4.7 7279键盘扫描及动态LED显示实验
    java学习之git的基本使用
    二、体验Linux系统(文件目录、shell)
    一、Hadoop3.1.3集群搭建
    Centos8安装docker及常用命令总结
    element-ui upload 组件 手动多次出发 submit
  • 原文地址:https://blog.csdn.net/u010164190/article/details/134060615