首页 > 编程语言 >c++防止头文件重复

c++防止头文件重复

时间:2024-06-13 21:31:01浏览次数:31  
标签:头文件 编译 重复 c++ HEADER pragma MY once

在C++的头文件中,为了防止重复包含,需要使用预处理指令#pragma once或者传统的条件编译方式。下面分别详细说明这两种方式的写法及作用:

#pragma once

使用#pragma once指令: #pragma once是一种简便的方式,可以确保头文件只被编译一次。在头文件的开头加入#pragma once即可,示例如下:

#pragma once

// 头文件的内容

传统方式

用条件编译方式: 除了#pragma once外,也可以使用传统的条件编译方式来防止重复包含。在头文件的开头和结尾加入条件编译指令,示例如下: 

#ifndef MY_HEADER_H
#define MY_HEADER_H

// 头文件的内容

#endif // MY_HEADER_H

 

上述代码中,ifndef表示如果MY_HEADER_H宏未定义,就执行下面的代码并定义MY_HEADER_H宏;endif表示结束条件编译;ifdef表示如果宏已经定义过,就不会再次编译头文件。

以上是两种防止重复包含的方式,一般来说,推荐使用#pragma once指令,简单易用且不易出错。当然,条件编译方式也是有效的做法,在传统项目中仍然有一定的应用。

#ifndef取名的规范

实际上,MY_HEADER_H是一个常见的宏定义,用于防止重复包含。可以使用任何唯一的宏名称来代替它。通常,建议使用头文件的名称加上一个下划线来构成宏名称,确保其唯一性。例如,如果头文件名为my_header.h,则可以定义如下的宏:

这样就可以防止同一个头文件被重复包含多次,确保程序的正确编译。

#ifndef MY_HEADER_H_
#define MY_HEADER_H_

// 头文件的内容

#endif // MY_HEADER_H_

标签:头文件,编译,重复,c++,HEADER,pragma,MY,once
From: https://blog.csdn.net/qq_71286244/article/details/139664541

相关文章

  • 【C++修行之道】类和对象(六)再谈构造函数(初始化列表)| explicit关键字 | static成员 |
    目录一、再谈构造函数1.1构造函数体赋值1.2初始化列表1.所有的成员,既可以在初始化列表初始化,也可以在函数体内初始化2.每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)3.类中包含以下成员,必须放在初始化列表位置进行初始化:声明给缺省值也可以是其......
  • Python实现:查找文本文件中重复的汉字
    查找文本文件中重复的汉字,找到在所在行号文本文件格式大小多少前后左……text.pyimportosimportrelist=[]same=0total=0index=[]withopen("1.txt","r",encoding="utf-8")asf:forlineinf.readlines():line=line.strip('\n......
  • 【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
      ......
  • C++的算法:割点与割边
            在图论中,割点与割边是图的重要性质,它们在图的连通性、网络流等问题中扮演着关键角色。在C++中,我们可以通过深度优先搜索(DFS)等算法来判定一个图中的割点与割边。        割点,又称关节点或桥接点,是指在无向连通图中,如果删除某个顶点后,图的连通分量数增......
  • C++基础知识总结
    一.c++的初始化intmian(){inta=10;intb(10);//用()来初始化intc{10};//用{}来初始化,较统一标准return0;}二.c++语言输入与输出#include<iostream>//输入输出流usingnamespacestd;intmain(){inta{0};charch{'0'};cin>>a>>ch;//提取符cout<<&......
  • c/c++ 创建windows 服务程序
    1项目介绍本次的项目是设计windows服务程序监听系统时间,对误差的时间进行修改,解决不连网下的本地时间的误差问题。2程序设计当程序直接运行时为创建该程序为windows服务程序,创建的windows服务程序设置为开机自启且运行带参数"-krunservice"以进行区别为创建服务还是运行程序......
  • SAP ABAP开发过程中如何高效率从内表中获取不重复记录?
    在SAPERP系统开发过程中,经常会遇到需要将大量数据从数据库表中提取,储存在内表中,供进一步处理之用。而在这个内表中,有时候存在大量重复的记录,若要从中得到唯一记录,有以下三种方法:方法一:内部表循环赋值,使用COLLECT语句追加记录方法二:内部表循环赋值,使用ATNEW和APPEND语......
  • c++定义了类在main函数中使用的一个坑现象的解决,让我理解了栈,堆和内存之间关系。
    首先描述一下我的坑是啥?我的坑就是写了一个对集料颗粒进行角度计算的类,在main函数中使用采用了类定义申明,这样使用导致一个坑,这个类中对于集料的数目进行了宏定义,发现数据如果超过20个,编译就报错,当时没有太在意这个坑,没有思考什么原因。也就将就者用了。后来对接同事说,这个颗粒数......
  • [C++ Primer] 字符串、向量和数组
    [C++Primer]字符串、向量和数组标准库类型string标准库类型string表示可变长的字符序列,使用该类型需包含string头文件。作为标准库的i一部分,string定义在命名空间std中。拷贝初始化:使用等号(=)初始化一个变量直接初始化:不使用等号strings5="hiya"; //拷贝初始化s......
  • [C++ Primer] 变量和基本类型
    [C++Primer]变量和基本类型变量默认初始化如果定义变量时没有指定初值,则变量默认初始化,此时变量被赋予“默认值”。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。内置类型:其默认值由定义的位置决定。定义于任何函数之外的变量被初始化为0。绝大多数......