#pragma once 和 #ifndef 的区别
时间: 2024-12-15 13:06:30 浏览: 5
全面了解#pragma once与 #ifndef的区别
5星 · 资源好评率100%
`#pragma once` 和 `#ifndef` 都是在 C++ 中用于控制预处理器指令的条件编译,但它们的作用机制和使用场景有所不同。
`#ifndef` 是 "if not defined" 的缩写,它检查某个宏是否已经被定义过。如果没被定义,`#ifndef` 后面的代码块会被包含。这通常用于防止头文件被多次包含,避免重复定义带来的问题:
```cpp
#ifndef MY_HEADER_H
#define MY_HEADER_H
// 头文件内容...
#endif // MY_HEADER_H
```
这里,当第一次包含 `MY_HEADER_H` 时,会定义 `MY_HEADER_H`,后续再包含就不会执行内部的内容,因为 `#ifndef` 已经确认宏已被设置。
相比之下,`#pragma once` 是非标准特性,由各个编译器厂商支持,它的作用类似于 `#ifndef`,但在所有支持的编译器中都能保证只包含一次。如果遇到同名头文件,只有第一个文件会被包含:
```cpp
#pragma once
// 头文件内容...
```
然而,由于不是跨平台的编译指令,`#pragma once` 的兼容性不如 `#ifndef`,因此在编写跨平台代码时,还是推荐使用 `#ifndef` 作为首选。
阅读全文