#pragma once 对比 include guards:如何选择防止重复包含?
大家好!我是一名初学 C++ 的开发者,已经多次遇到头文件双重包含的问题。例如,我有这样的代码:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b) { return a + b; }
#endif
// main.cpp
#include "math_utils.h"
#include "math_utils.h" // 不小心包含了两次
int main() {
return add(2, 3);
}
使用 include guards 一切正常,但我注意到许多现代项目(例如来自 Boost 的项目)使用 #pragma once。我了解到这是一个非标准指令,但所有主流编译器都支持它。
我感兴趣的是:
- include guards 是否存在实际的性能问题?
- 为什么
#pragma once被认为是更“干净”的解决方案? - 如果文件被复制或位于不同文件夹中,
#pragma once是否会导致错误? - 应该写什么