You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在包含定义的.hpp头文件中是否应使用#pragma once指令?

关于.hpp头文件是否应使用#pragma once的问题

结论:依然应该使用#pragma once

不管是传统的.h声明头文件,还是包含大量定义的.hpp头文件,#pragma once的核心作用都是避免同一个头文件被编译器重复读取、预处理和编译,这个需求是通用的,具体原因如下:

  • 首先,.hpp里的定义并非都能安全重复包含:
    比如你可能在.hpp里写了inline函数、模板实现、constexpr变量,虽然这些语法允许在多个编译单元存在定义,但重复包含会让编译器多次处理相同代码,白白增加编译时间。如果不小心在.hpp里放了非inline的普通函数/全局变量定义,没加防护的话,同一个编译单元里多次包含就会直接触发「重复定义」的编译错误。

  • 其次,#pragma once和头文件内容类型无关:
    它只关心「这个文件有没有被当前编译单元包含过」,不管文件里是声明还是定义。哪怕你的.hpp全是模板实现(必须放在头文件里的内容),只要有可能被多个其他头文件或.cpp包含,就需要用它来避免重复处理。

  • 额外提醒:
    如果你的.hpp里有非inline的全局定义(比如普通函数、非const全局变量),就算加了#pragma once,在多个.cpp里包含它还是会报重复定义——这不是#pragma once的问题,而是你违反了「头文件不应放非inline全局定义」的规则,这类代码应该移到.cpp源文件里。

内容的提问来源于stack exchange,提问作者LRetro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:54:54