我在C++标准库(例如:istream(的一些头文件中看到#pragma once
和#ifndef/#define
都包含保护。 我正在使用MS Visual Studio 2010 Express。
例如:
#pragma once
#ifndef _ISTREAM_
#define _ISTREAM_
.
.
.
为什么两者都使用?
如果支持#pragma once
,则会导致更快的编译时间,因为编译器只包含该文件一次。#ifndef
仍然再次包含该文件,但预处理器会去除中间的所有文本(因为之前已经计算了#define
,因此已定义(。
这里有一个讨论:#pragma 一次与 #ifndef
这可能是为了交叉兼容性。Pragma曾经被广泛支持,但不一定是标准的一部分。
看看: #pragma 一次与包括警卫?