有人能告诉我一些针对各种编译器支持#pragma once
指令的解决方法吗?
我想在我的头文件中使用类似以下的语句:
#if _MSC_VER > ... || __GNUC__ > ... || ...
#pragma once
#endif
也许它已经存在于boost源代码或您的代码中了?
有人能告诉我一些针对各种编译器支持#pragma once
指令的解决方法吗?
我想在我的头文件中使用类似以下的语句:
#if _MSC_VER > ... || __GNUC__ > ... || ...
#pragma once
#endif
也许它已经存在于boost源代码或您的代码中了?
#pragma once
是特定于编译器的,可能会导致在不支持它或具有不同含义的编译器上编译失败。此外,在 include guards 之外编写任何内容可能会阻止编译器能够检测和优化它们以防止再次打开相同的文件。你应该永远不要使用 #pragma once
。 - R.. GitHub STOP HELPING ICEpragma once
信息的表格:https://en.wikipedia.org/wiki/Pragma_once#Portability。现在使用它似乎是相当安全的。 - Ivan#pragma once
不受支持的问题已经被限制在两个方面:(1)使用硬件供应商特定编译器的嵌入式系统(并且该供应商可能已经倒闭),以及(2)复古计算机,在这些计算机上必须使用超过十年的工具链编译代码。 - rwong#pragma once
是一种非标准的替代 include guards 的方法:
#ifndef HEADER_H
#define HEADER_H
//contents of header
#endif
两者都确保头部内容不会在同一翻译单元内重复粘贴。
#pragma once
。我使用过的现代 C++ 编译器都支持该指令。 - James McNellis#pragma once
的关系是从哪里来的?你能提供一些信息/链接吗? - Dmitry Volosnykhpragma once
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md - Chenna V#pragma once
并不完美。但除此之外,它非常方便和好用,所以我个人认为如果你的编译器都支持它,就没有必要避免使用它。 - Jenix#pragma once
指令被绝大多数现代编译器支持,因此在自己的项目中使用它是相对不太可能会遇到问题的。