我在一些C++标准库的头文件中看到了两种包含保护方式,分别是#pragma once
和#ifndef/#define
。我正在使用MS Visual Studio 2010 Express。
例如:
#pragma once
#ifndef _ISTREAM_
#define _ISTREAM_
.
.
.
为什么两者都被使用?
我在一些C++标准库的头文件中看到了两种包含保护方式,分别是#pragma once
和#ifndef/#define
。我正在使用MS Visual Studio 2010 Express。
例如:
#pragma once
#ifndef _ISTREAM_
#define _ISTREAM_
.
.
.
#pragma once
,那么编译时间会更快,因为编译器只会将文件包含一次。而 #ifndef
仍然会再次包含文件,但是预处理器会删除中间的所有文本(因为先前已经评估了 #define
并定义了它)。
这里有一个讨论:#pragma once versus #ifndef。这很可能是为了跨平台兼容性。Pragma once 得到广泛支持,但并不一定是标准的一部分。
#once
。 - user4581301
offsetof
)。不要将标准库视为编写代码的典范。(另一个例子是包含保护:名称_ISTREAM_
保留供实现使用) - Pete Becker