36

可能重复:
#pragma - 帮助理解

我看了pragma很多次,但总是很困惑,有人知道它是做什么的吗?只有窗户吗?

4

4 回答 4

47

在 C 和 C++ 编程语言中,#pragma once 是一个非标准但广泛支持的预处理器指令,旨在使当前源文件在单个编译中仅包含一次。因此,#pragma 曾经与 #include 保护具有相同的用途,但具有几个优点,包括:更少的代码、避免名称冲突和提高编译速度。

有关更多详细信息,请参阅Wikipedia文章。

于 2011-04-25T09:17:00.350 回答
40

它用于替换以下预处理器代码:

#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif

一个好的约定是添加两者以支持旧版编译器(这很少见):

#pragma once
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif

因此,如果 #pragma once 失败,旧方法仍然有效。

于 2011-04-25T09:27:37.623 回答
4

通常,这些#pragma指令旨在实现特定于编译器的预处理器指令。它们不是标准化的,所以你不应该过分依赖它们。

在这种情况下,#pragma once的目的是替换您在头文件中使用的包含保护以避免多次包含。它在支持它的编译器上工作得更快一些,因此它可以减少大型项目的编译时间,这些项目有很多#include经常 'ed 的头文件。

于 2011-04-25T09:23:51.370 回答
2

pragma 是预处理器的指令。它通常用于在编译期间提供一些额外的控制。例如不要包含相同的头文件代码。有很多不同的指令。答案取决于pragma 词后面的内容。

于 2011-04-25T09:30:26.303 回答