首页 > 编程语言 >C++ #pragma once

C++ #pragma once

时间:2022-10-25 23:34:47浏览次数:44  
标签:__ ... 头文件 C++ pragma ifndef once

转自:https://www.cnblogs.com/hokyhu/archive/2009/03/30/1425604.html

 1.介绍

避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。

 #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 声明、定义语句
    #endif


 #pragma once
    ... ... // 声明、定义语句

区别:

  • #ifndef不仅可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件(或者代码片段)不会被不小心同时包含。但如果不同头文件中宏名定义相同,那么就会有冲突,而且由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,ifndef会使得编译时间相对较长。
  •   #pragma once一般由编译器提供保证:同一个文件不会被包含多次。但不保证内容是否完全一致,它只针对文件。如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。#pragma once does have one drawback (other than being non-standard) and that is if you have the same file in different locations (we have this because our build system copies files around) then the compiler will think these are different files.  https://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard

 

标签:__,...,头文件,C++,pragma,ifndef,once
From: https://www.cnblogs.com/BlueBlueSea/p/16826808.html

相关文章

  • VC++之MFC类库中文手册 完整chm版
    VC++之MFC类库中文手册用于查询MFC中各类的对应关系以及使用方法,拥有MFC类索引,参考阅读方便。类库概述概述部分描述了Microsoft基本类库(MFC)6.0版中的类并对其按种类分类。......
  • C++ override关键字
    转自:https://blog.csdn.net/fanyun_01/article/details/791221361.介绍 在派生类中,重写(override)继承自基类成员函数的实现(implementation)时,要满足如下条件:一......
  • 实验三 数组、指针与现代C++标准库
    实验五代码:info.hpp:#pragmaonce#include<iostream>usingnamespacestd;classinfo{public:info(stringni="",stringco="",stringci="",i......
  • C++ std::numeric_limits用法
    转自:https://blog.csdn.net/fengbingchun/article/details/779225581.介绍 std::numeric_limits为模板类,在库编译平台提供基础算术类型的极值等属性信息,需包含<limits>......
  • Dev-C++调试过程
    代码如下:#include<stdio.h>intmain(){inta=5;intb=6;intt;t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);return0;}步骤如下:1. 新建文件并输入上述代码保......
  • Dev-C++调试过程
    代码如下:#include<stdio.h>intmain(){inta=5;intb=6;intt;t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);return0;}步骤如下:1. 新建文件并输入上述代码保......
  • C++:运算符重载
    前言  重载我们又称之为多态,重载在编程中的用法非常之多,比如最熟悉的函数重载(基于C++开发的capl语言同样支持函数重载)。当然在C++中仍然支持将多态引用到运算符中,例如*......
  • P7911 网络连接评论及c++题解
    P7911网络连接1.原题链接root2.评论下位黄的水平前置知识:sscanf()函数,sprintf()函数,map<>当然,不会sscanf()和sprintf()也有解法,详见解法13.解法解法1#inclu......
  • 实验3 数组、指针与现代c++标准库
    实验任务5#include"Info.hpp"#include<iostream>#include<string>#include<vector>intmain(){strings1,s2="continue";inti=0,n=0;intcon......
  • C++ 面向对象高级开发 基础篇(二)
    操作符重载C2就是this传递者不用知道是否returnbyreference 非成员函数(全局函数)的操作符重载(有几种用法就写几种重载)不能使用returnbyreference因为他们得......