使用#pragma once和#ifndef在同一个文件中包含guard

时间:2017-07-21 15:09:42

标签: c++

我在C ++标准库的一些头文件中看到(例如: istream ),#pragma once#ifndef/#define都包含警卫。 我正在使用MS Visual Studio 2010 Express。

例如:

#pragma once
#ifndef _ISTREAM_
#define _ISTREAM_
.
.
.

为什么两者都被使用?

2 个答案:

答案 0 :(得分:2)

如果支持#pragma一次,则会导致更快的编译时间,因为编译器只包含一次文件。 #ifndef仍然再次包含该文件,但其中的所有文本都被预处理器剥离(因为#define之前已经评估过,因此已定义)。

有关于它的讨论here

答案 1 :(得分:0)

这可能是交叉兼容性的。 Pragma曾被广泛支持,但不一定是标准的一部分。

看看:     #pragma once vs include guards?