好的,我来帮你系统总结一下 #pragma once 的用法、原理及优缺点,方便 C/C++ 开发者快速理解。
#pragma once 基础#pragma once#ifndef MYHEADER_H
#define MYHEADER_H
// 头文件内容
#endif // MYHEADER_H#pragma once#pragma once
// 头文件内容#pragma once 更简洁,不需要定义宏名假设有两个头文件 A.h 和 B.h:
A.h
#pragma once
#include "B.h"
void funcA();B.h
#pragma once
void funcB();main.cpp
#include "A.h"
#include "B.h" // 即使这里再次包含 B.h,也不会重复编译
int main() {
funcA();
funcB();
return 0;
}✅ 编译器只会处理一次 B.h,避免重复定义。
#pragma once
#ifndef MYHEADER_H
#define MYHEADER_H
// 内容
#endif特性 | #pragma once | include guard |
|---|---|---|
写法 | 简单,一行 | 需要宏定义 |
可读性 | 高 | 中 |
编译效率 | 高(现代编译器) | 略低 |
标准化 | 非标准,但广泛支持 | 标准 C/C++ |
跨路径重复包含 | 可能有问题 | 完全可靠 |
💡 小技巧:
#pragma once,简洁高效我可以帮你画一张 #pragma once vs include guard 对比流程图,直观展示预处理器如何处理重复包含文件。
你希望我画吗?
https://www.52runoob.com/archives/6673
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。