【发布时间】:2018-03-06 03:31:50
【问题描述】:
在 C++ 11 中,#pragma once 不是标准的一部分,但受到广泛支持。以下维基百科链接表明大多数主要编译器(GCC、Clang 等)都支持它:
https://en.wikipedia.org/wiki/Pragma_once
我的电脑是 64 位 Windows 机器。使用我的编译器 (GCC),#pragma 编译一次。我的问题是,如果使用相同的编译器,#pragma once 是否也适用于其他主要操作系统(Apple、Linux 和 Android)。
我确信每个操作系统都有例外,但我只是想知道#pragma 是否曾经适用于每个操作系统的标准计算机。
【问题讨论】:
-
它依赖于编译器,而不是依赖于操作系统。
-
唯一不支持它的主要编译器是 Portland Group 编译器(它确实支持 C++11):en.wikipedia.org/wiki/Pragma_once#Portability
-
还有一些方法可以阻止编译器。如果您的项目中有软链接目录或硬链接目录和同名头文件,您可能会欺骗编译器两次读取头文件,或者不读取它认为已经读取的头文件解决方案可能看起来是“好吧,不要那样做!”,但有时成熟的项目目录结构随着时间的推移会产生一些奇怪的情况。
标签: c++ c++11 compilation operating-system pragma