首页 > 编程语言 >C++-#pargma once

C++-#pargma once

时间:2023-04-29 18:59:28浏览次数:45  
标签:文件 头文件 -# C++ 编译器 pragma pargma once

C++-#pargma once

https://baike.baidu.com/item/%23pragma once/9468158?fr=aladdin

#pragma once是一个比较常用的C/C++预处理指令。
只在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次。

基本信息

#pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过大部分编译器都有这个预处理指令了。

#ifndef#define#endifC/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。

用法

方式一由语言支持所以移植性好,方式二可以避免名字冲突

方式一:

#ifndef _SOMEFILE_H_
#define _SOMEFILE_H_
.......... // 一些声明语句
#endif

方式二:

#pragma once
... ... // 一些声明语句
  • #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。

    • 缺点,如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。
  • #pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。

    • 好处,不必用宏名字,不会出现宏名碰撞引发的奇怪问题。
    • 缺点,如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

标签:文件,头文件,-#,C++,编译器,pragma,pargma,once
From: https://www.cnblogs.com/yongchao/p/17364346.html

相关文章

  • 4-6次题目集总结
    前言:4-6次pta实验相较于之前三次难度有所提升,主要是为了训练我们对于java类的设计以及类内方法的设计,以及很多语法知识,是正式进入java的过程。题目集四:主要知识点是一些语法的使用,类的设计,以及类的方法体,需要考虑输出格式和算法设计,如正则表达式,LinkedHashSet去重等,题目难度不低......
  • 06 - react的类组件中的状态state render函数 this指向问题 事件绑定
    //注册事件importReactDomfrom"react-dom"import{Component}from"react"//类组件中的状态通过this.state.xxx来获取状态classHelloextendsComponent{//事件对象eventhandleClick(e){console.log(this)//udnefiend使用箭头函数解决this......
  • C++-std::this_thread::get_id()-获取线程id
    C++-std::this_thread::get_id()-获取线程idstd::this_thread::get_id()头文件:<thread>函数:std::this_thread::get_id()用例:std::thread::idthread_id=std::this_thread::get_id();std::thread对象的成员函数get_id()头文件:<thread>函数:std::thread::idget_id()用例:......
  • C++-改变终端(cout/printf)输出不同颜色的字体-Linux
    C++-改变终端(cout/printf)输出不同颜色的字体-Linuxhttps://blog.csdn.net/qq_41972382/article/details/90311102不同颜色的输出主要依据格式ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用,隔开。printf#include<iostream>usingnamespacestd;intmain(){print......
  • 防火墙----会话表
       ......
  • cf-typedb2023-C
    题目链接:https://codeforces.com/problemset/problem/1787/C我是sb,这种dp都没想到。。。思路:首先得发现一个性质(贪心),每个数拆成的两个数一定是一个最大的(尽可能),另一个最小(尽可能)。这点不难证明,随便写写式子可得证。由于每个数只会影响相邻的两个数,所以我们可以dp算答案。......
  • react的类组件和函数组件 -- 状态 state
    //函数组件是无状态的既没有数据的类似vue组件中的data数据//类组件是有状态的组件是有数据的是双向绑定的数据是数据驱动视图的负责UI的视图更新(单个组件的私有数据组件之间的数据是独立的)importReactDomfrom"react-dom"import{Component}from"react......
  • C++-标准异常`<exception>`
    C++-标准异常<exception>std::exception定义于头文件<exception>classexception;https://www.apiref.com/cpp-zh/cpp/error/exception.html标准库头文件<stdexcept>https://www.apiref.com/cpp-zh/cpp/header/stdexcept.htmlstd::exceptionstd::bad_allocs......
  • 芯片SDC约束 -复制保存
    https://www.cnblogs.com/pcc-uvm/p/16996456.html?share_token=9651df97-e94c-4653-bf71-0a0fd6ca415e&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_android&utm_campaign=client_share芯片SDC约束1.芯片开发流程 数字开发过程中主要可以分为数......
  • Zotero-文献管理工具
    Zotero是一款开源的免费的文献管理软件,可以帮助研究人员、学生和学者收集、组织和引用研究文献。它能够自动从网络上抓取文章和其他文献的元数据,包括作者、标题、出版物信息等,并将其保存在本地数据库中。用户还可以使用Zotero创建标签、笔记和文件夹来组织他们的文献收藏,并在写作......