11年前关闭了。
#pragma - help understanding我看过pragma很多次,但总是很困惑,有人知道它是做什么的吗?它只是windows吗?
pragma
tvz2xvvm1#
在C和C++编程语言中,#pragma once是一个非标准但广泛支持的预处理器指令,旨在使当前源文件在一次编译中只包含一次。因此,#pragma once的用途与#include guards相同,但有几个优点,包括:减少代码、避免名称冲突、提高编译速度。有关详细信息,请参阅Wikipedia文章。
s5a0g9ez2#
它用于替换以下预处理器代码:
#ifndef _MYHEADER_H_ #define _MYHEADER_H_ ... #endif
一个好的约定是添加这两种编译器来支持遗留编译器(这很少见):
#pragma once #ifndef _MYHEADER_H_ #define _MYHEADER_H_ ... #endif
因此,如果#pragma一旦失败,旧方法仍然可以工作。
我在评论区看到一些人提倡使用guards而不是#pragma once。这在2023年及以后几乎没有意义,除非你针对的是一些你知道不支持#pragma once的特殊编译器。目前的最佳实践是只使用#pragma once,而根本不用考虑保护。1.所有主要的编译器都一直支持这个 * 永远 *,这是不会改变的。1.使用#pragma允许编译器使用它的内部缓存,这当然比使用预处理器要快,预处理器总是包含文件的内容,只是后来偶然发现了你的保护措施,并忽略了整个过程。1.它更短,更易于添加/维护
#pragma once
#pragma
deyfvvtc3#
一般来说,#pragma指令是用来实现编译器特定的预处理指令的,它们不是标准化的,所以你不应该过分依赖它们。在本例中,#pragma once的目的是替换头文件中使用的include guard,以避免多重包含。它在支持它的编译器上运行得更快一些,因此它可能会减少带有大量频繁使用#include的头文件的大型项目的编译时间。
#include
xmjla07d4#
pragma是预处理器的一个指令。2它通常用于在编译过程中提供一些额外的控制。3例如,不要包含相同的头文件代码。4有很多不同的指令。5答案取决于pragma单词后面的内容。
4条答案
按热度按时间tvz2xvvm1#
在C和C++编程语言中,#pragma once是一个非标准但广泛支持的预处理器指令,旨在使当前源文件在一次编译中只包含一次。因此,#pragma once的用途与#include guards相同,但有几个优点,包括:减少代码、避免名称冲突、提高编译速度。
有关详细信息,请参阅Wikipedia文章。
s5a0g9ez2#
它用于替换以下预处理器代码:
一个好的约定是添加这两种编译器来支持遗留编译器(这很少见):
因此,如果#pragma一旦失败,旧方法仍然可以工作。
2023更新
我在评论区看到一些人提倡使用guards而不是
#pragma once
。这在2023年及以后几乎没有意义,除非你针对的是一些你知道不支持#pragma once
的特殊编译器。目前的最佳实践是只使用
#pragma once
,而根本不用考虑保护。1.所有主要的编译器都一直支持这个 * 永远 *,这是不会改变的。
1.使用
#pragma
允许编译器使用它的内部缓存,这当然比使用预处理器要快,预处理器总是包含文件的内容,只是后来偶然发现了你的保护措施,并忽略了整个过程。1.它更短,更易于添加/维护
deyfvvtc3#
一般来说,
#pragma
指令是用来实现编译器特定的预处理指令的,它们不是标准化的,所以你不应该过分依赖它们。在本例中,
#pragma once
的目的是替换头文件中使用的include guard,以避免多重包含。它在支持它的编译器上运行得更快一些,因此它可能会减少带有大量频繁使用#include
的头文件的大型项目的编译时间。xmjla07d4#
pragma是预处理器的一个指令。2它通常用于在编译过程中提供一些额外的控制。3例如,不要包含相同的头文件代码。4有很多不同的指令。5答案取决于pragma单词后面的内容。