pragma once

浅析pragma once与include guard 控制C/C++头文件编译方法控制头文件编译一般有两种方法#pragma once 和include guard (即#ifndef,#define,#endif)#pragma once与#ifndef,#define,#endif一、#pragma once   一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次 ,#pragma once是编译相关,不过大部分编译 阅读详情

#pragma once 


功能类似于 c/c++ 的预编译头, #ifndef...#define...#endif,用于避免重复定义和编译。


若在文件的开头部分声明 #pragma once,则

(1)编译时,此文件仅被编译一次

(1)若此文件被多个文件包含,最终编译前,则保证仅被包含一次

(3)若有多个此文件的副本,则不能保证仅被编译一次或包含一次

(4)非 c/c++ 宏定义标准,所以可能并非所以的编译器都支持此宏定义


#ifndef...#define...#endif,与#pragma once 不同,

(1) #ifndef...#endif 包围起来的内容仅被编译一次或包含一次,不管此文件有多个不同名字的副本文件

(2) #pragma once 仅确保声明了的文件被编译一次或包含一次,对于有多个副本的情况,不能保证仅被编译一次或包含一次

(3)#ifndef...#define...#endif 为c/c++标准宏定义,一般编译器都会支持;#pragma once 不是 c/c++ 的 标准宏定义,可能并非所以的编译器都支持 

一文搞清楚pragma once和ifdef区别 标识符只能用#define定义才行:#define 标识符,如果定义过#ifdef就会判断为真,执行对应的程序段。如果该头文件没有被包含过,标识符_ABC_H就没有被定义过,进入下面的程序段(程序段里就定义了标识符,那么下次包含该文件时,发现标识符已经被定义,就不会进入下面的程序段了)原理不同:**#pragma once如果发现头文件被包含就不会打开头文件,而后者每次都要打开头文件去判断头文件宏,所以前者更快**;注意:#ifdef只是用来判断有没有被#define定义过,定义的值可有可无,毫无影响。 阅读详情

相关推荐

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析 目前,迭代法和强度传输方程(TIE)法是两类典型的非干涉相位检索技术(Phase Retrieval,被称为相位恢复、相位检索、相位反演法、相位复原等)。迭代法中的经典算法是Gerchberg-Saxton(GS),随后,出现了包括错误减少算法(ER)、混合输入输出法(HIO)、梯度搜索算法、角谱迭代算法等改进算法。...

简单光学 2万+

pragma once用法总结

pragma指令与#ifndef指令 在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性,通常有两种方式—— 第一种是#ifndef指令防止代码块重复引用,比如说 #ifndef _CODE_BLOCK #define _CODE_BLOCK // code #endif// _CODE_BLOCK 第二种就是#pragma once指令,在想要保护的文件开头写入 #pragma once #ifndef方式是C/C++语言的标准支持,也是比较常用的方式,#if

DaMercy的博客 8744

Windows 11 RDP Wrapper 配置教程与常见问题解决方法

解锁家庭版RDP主机功能(Windows 11家庭版原生不支持作为RDP服务器)突破单用户连接限制,实现多用户同时远程登录(类似服务器版功能)它不修改系统核心文件,通过注入方式工作,相对安全可靠。RDP Wrapper是Windows 11家庭版用户启用远程桌面、突破单用户限制的高效工具。遵循本文步骤可快速完成配置,遇到问题时按常见问题排查方案逐一解决,多数问题可通过更新配置文件或重启服务解决。若长期使用,建议关注官方GitHub仓库的更新,确保兼容性和安全性。

weixin_41521681的博客 1374

pragma once和#ifndef的区别

pragma once表示的是这个头文件只声明一次,可以防止被重复的引用导致的错误;而对于#ifndef语句则也是声明一次,但是确实使用的事宏。我们不必为怎么是用一个宏而大费周折了。如果声明的宏的名称一样的话,可能会导致头文件明明存在,但是编译器却说找不到状况。 而对于pragma once保证的是头一个文件不一定这两个文件的内容相同,保证不被包含多次。不必费劲想这个宏名,当然也就不会出现宏名一样导致的错误。对应的缺点就是如果某个头文件有多份拷贝。可以保证他们不被重复包含。当然相比宏名相同引发的问题,重复

评布客 631

STM32F407硬件IIC驱动OLED避坑实录:从‘不显示’到‘稳定刷屏’的完整调试过程

本文详细记录了使用STM32F407硬件IIC驱动OLED屏幕的完整调试过程,从初始的‘不显示’问题到最终实现‘稳定刷屏’。文章涵盖了硬件接线、I2C外设配置、常见问题排查及性能优化技巧,特别针对STM32标准库开发中的难点提供了实用解决方案,是嵌入式开发者驱动OLED屏幕的实用指南。

weixin_30315723的博客 303

计算机视觉之ResNet

RestNet是2015年由微软团队提出的,在当时获得分类任务,目标检测,图像分割第一名。该论文的四位作者何恺明、张祥雨、任少卿和孙剑如今在人工智能领域里都是响当当的名字,当时他们都是微软亚研的一员。实验结果显示,残差网络更容易优化,并且加深网络层数有助于提高正确率。在ImageNet上使用152层的残差网络(VGG net的8倍深度,但残差网络复杂度更低)。对这些网络使用集成方法实现了3.75%的错误率。获得了ILSVRC 2015竞赛的第一名。原文链接这是一篇计算机视觉领域的经典论文。

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 2万+

C++中对比pragma once和ifndef的使用区别

本文比较了C/C++中防止头文件重复包含的两种方式:#pragma once和#ifndef宏守卫。#pragma once简洁高效但非标准,依赖文件路径标识,兼容现代主流编译器;而#ifndef宏守卫符合标准,可移植性强但需手动管理唯一宏名。文章指出二者混用并无优势,推荐现代项目优先使用#pragma once,跨平台项目则选择宏守卫。编译效率上#pragma once略优,但都经过编译器优化。选择时应考虑项目环境和编译器支持情况。

韩江雪de 小屋 693

工程创新训练大赛智能网联车辆赛道LKA+自动驾驶9000+分数分案例

/获取主车在主车路径上的ST坐标。if (status == AVPStatus::eForwarding) // approaching the parking space接近阶段。if (status == AVPStatus::eForwarding) // approaching the parking space接近阶段。if (status == AVPStatus::eForwarding) // approaching the parking space接近阶段。

handsomeboyou的博客 1134

pragma once 条件编译

<br /><br />#if _MSC_VER > 1000<br />#pragma once<br />#endif<br /><br /><br />解释:<br />这是微软的预编译控制。<br />在_MSC_VER较小时,它对一些东西的支持与新版不同<br /><br /><br />_MSC_VER分解如下:<br /><br />MS:Microsoft(微软)的简写<br /><br />C:MSC就是Microsoft出的C编译器。<br /><br />VER:Version(版本)

tmac_0817的专栏 634

电压跟随器在ADC采样电路中的作用分析

电压跟随器在ADC采集系统中扮演关键角色,它能解决分压电路因ADC输入阻抗导致的电压误差问题。通过运放构成的电压跟随器可隔离信号源与负载,保证采样精度,尤其适用于高阻抗传感器或高速采样场景。工程应用中需注意运放带宽、轨对轨输出能力及抗干扰设计。合理使用电压跟随器能显著提升信号完整性,在复杂电子系统中成为不可或缺的"信号桥梁。

硬核科技 659

★教程1:matlab学习教程入门100例目录

★基础入门 1.为什么要学习MATLAB 2.MATLAB安装 持续更新....... ★MATLAB基础编程语言熟悉

FPGA/MATLAB学习教程/源码/项目合作开发 4万+

c++ 重定义class,pragma once作用详解

在写c++或c代码时,头文件各种编译报错是一种很头疼的问题,今天对一个常见现象做一个记录,并且对解决方法做一个详细探究。首先看错误提示如下: ``` 错误    C2011    “CRange”:“class”类型重定义    ScanCodeProject     ``` "class 类型重定义",这是一个常见错误,错误原因根本在于文件的多次编译,也就是说假如我第一次#include 导入了...

yh199577的博客 1359

PCL点云库入门(第6讲)——PCL库中Eigen数学工具库的基本使用(持续更新)

Eigen库是一个高性能的C++模板库,专注于线性代数、矩阵和向量运算,以及相关的数值分析和算法。在Eigen库中,所有的矩阵和向量均被视为矩阵模板类的实例。向量可以被看作是特殊形式的矩阵,具体表现为只包含1行或1列。

qq_36812406的博客 1753

C++学习笔记之pragma once的理解

#pragma once是一个比较常用的C/C++预处理指令,只要在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次,防止头文件被重复引用。 **“被重复引用”**指头文件在cpp文件中多次被include,include嵌套造可能现象造成头文件多次引用。 举例:a.h文件#include “c.h”,b.cpp文件#include “a.h” 和#include “c.h”。此时...

lynnlee_36的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Pragma Once

为防止其它文件包含我们时发生重复 1.#pragmaonce这个宏有什么作用? 为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。 在能够支持这两种方式的编译器上,二者并没有太大的区别。但两者仍然有一些细微的区别。 2.两者的使用方式有何区别? 示例代码如下: 复制代码 //方式一: #ifndef SOMEFILE_H #define SOMEFILE_H … … // 声明、定义语句 #endif //方

qq_33229537的博客 329

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C/C++ Pragma Once 使用详解

深入解析 C/C++ 中 #pragma once 的使用方法与最佳实践,涵盖头文件保护、编译效率提升及跨平台兼容性。适合希望优化代码结构与编译速度的开发者学习参考。

技术那些事 821

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别

pragma once 之前一直用的很好,今天和同事的配合中发现自己没有真正理解pragma once。 原因:同事喜欢把公共的头文件通过生成后事件复制到一个公共的include文件夹中。 摘抄: #ifndef方式:      #ifndef __SOMEFILE_H__      #define __SOMEFILE_H__    1     ... ... // 一些声明语

The_dying_man的博客 484

C++ pragma once与 #ifndef

C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别 pragma once 之前一直用的很好,今天和同事的配合中发现自己没有真正理解pragma once。 原因:同事喜欢把公共的头文件通过生成后事件复制到一个公共的include文件夹中。 摘抄: ?1234#ifndef方式:   #ifndef __SOMEFILE_H__   #define __SOMEFILE_H__  1&...

Fightingdddd的博客 333

pragma once 与 ifndef

From: http://www.cppblog.com/szhoftuncun/archive/2007/10/28/35356.html #pragma once与 #ifndef的区别 为了避免同一个文件被include多次 1   #ifndef方式 2   #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些

云里雾里的专栏 614
上一篇: 字符编码笔记:ASCII,Unicode和UTF-8
下一篇: 今年的工作与学习计划
bluemaths
博客等级 码龄18年 7粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值