有人可以告诉我#pragma once
为各种编译器提供指令支持的解决方法吗?
我想在我的标题中使用如下内容:
#if _MSC_VER > ... || __GNUC__ > ... || ...
#pragma once
#endif
也许它已经存在于提升源或您的代码中?
#pragma once
是包含警卫的非标准替代方案:
#ifndef HEADER_H
#define HEADER_H
//contents of header
#endif
两者都确保标题内容不会在同一个翻译单元中多次粘贴。
我自己喜欢使用传统的包含警卫(如接受的答案所建议的那样)。这实际上并没有那么多工作,而且您获得了 100% 可移植性的好处。如果您正在编写库、发布代码示例等,最好使用老式语法以避免其他人遇到麻烦。
也就是说,这里的其他人也指出,绝大多数现代编译器都尊重该#pragma once
指令,因此您在自己的项目中使用它的可能性相对较小。
维基百科有一个支持该指令的编译器列表: