# pragma once在C语言中是什么意思?[duplicate]

p1iqtdky  于 2023-01-29  发布在  其他
关注(0)|答案(4)|浏览(221)
    • 此问题在此处已有答案**:

11年前关闭了。

    • 可能重复:**

#pragma - help understanding
我看过pragma很多次,但总是很困惑,有人知道它是做什么的吗?它只是windows吗?

tvz2xvvm

tvz2xvvm1#

在C和C++编程语言中,#pragma once是一个非标准但广泛支持的预处理器指令,旨在使当前源文件在一次编译中只包含一次。因此,#pragma once的用途与#include guards相同,但有几个优点,包括:减少代码、避免名称冲突、提高编译速度。
有关详细信息,请参阅Wikipedia文章。

s5a0g9ez

s5a0g9ez2#

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

#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif

一个好的约定是添加这两种编译器来支持遗留编译器(这很少见):

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

因此,如果#pragma一旦失败,旧方法仍然可以工作。

2023更新

我在评论区看到一些人提倡使用guards而不是#pragma once。这在2023年及以后几乎没有意义,除非你针对的是一些你知道不支持#pragma once的特殊编译器。
目前的最佳实践是只使用#pragma once,而根本不用考虑保护。
1.所有主要的编译器都一直支持这个 * 永远 *,这是不会改变的。
1.使用#pragma允许编译器使用它的内部缓存,这当然比使用预处理器要快,预处理器总是包含文件的内容,只是后来偶然发现了你的保护措施,并忽略了整个过程。
1.它更短,更易于添加/维护

deyfvvtc

deyfvvtc3#

一般来说,#pragma指令是用来实现编译器特定的预处理指令的,它们不是标准化的,所以你不应该过分依赖它们。
在本例中,#pragma once的目的是替换头文件中使用的include guard,以避免多重包含。它在支持它的编译器上运行得更快一些,因此它可能会减少带有大量频繁使用#include的头文件的大型项目的编译时间。

xmjla07d

xmjla07d4#

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

相关问题