UE4+C++开发-(五)#pragma once

在 C/C++ 编程中,#pragma once 是一个预处理器指令,主要用于防止头文件被重复包含,避免因多次包含同一头文件而导致的编译错误(如变量 / 类重复定义)。

作用与原理

当编译器遇到 #pragma once 时,会记录当前头文件的路径。如果后续后续编译过程中再次遇到到包含该头文件的指令(#include),编译器会直接跳过,不再重复包含和编译该文件。

例如,在你的之前的 LoginWidget.h 中:

cpp

运行

#pragma once  // 防止重复包含
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
// ... 其他代码

如果有多个 .cpp 文件或其他头文件同时 #include "LoginWidget.h"#pragma once 会确保该头文件只被编译一次。

与传统方式的对比

传统上,防止头文件重复包含使用宏守卫(Header Guard),例如:

cpp

运行

#ifndef LOGIN_WIDGET_H  // 如果未定义该宏
#define LOGIN_WIDGET_H  // 定义宏

// 头文件内容...

#endif  // 结束宏守卫

#pragma once 与宏守卫的区别:

  • 简洁性#pragma once 只需一行,无需定义和管理宏名称。
  • 效率#pragma once 由编译器直接处理(基于文件路径),比宏守卫(文本替换机制)稍快。
  • 兼容性:宏守卫是 C/C++ 标准的一部分,所有编译器都支持;#pragma once 是编译器扩展(但主流编译器如 MSVC、GCC、Clang 均支持)。

使用建议

  1. 优先使用:在 Unreal Engine 开发中,#pragma once 是推荐的方式,UE 的源码中也广泛使用。
  2. 无需混合使用:不要同时写 #pragma once 和宏守卫,多余且无必要。
  3. 注意文件路径#pragma once 基于文件路径判断,若同一文件通过不同路径被包含(如硬链接、不同相对路径),可能失效(但 UE 项目结构中极少出现这种情况)。

简单来说,#pragma once 是现代 C++ 开发中简化头文件管理的实用指令,尤其在大型项目(如 Unreal 游戏)中能有效避免重复包含问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值