我已经在网上研究过,有人说他们避免多次包含同一个文件,但我仍然不清楚相同文件的区别和含义。
谢谢你提前。
答案 0 :(得分:1)
#pragma once
不是标准的一部分,可能无法在所有操作系统或编译器上运行
#ifndef
是在大多数操作系统上只包含一次文件的首选方法
除了#pragma once
之外,如果你复制和粘贴代码等,忘记更改标题保护可能会导致错误,而{{1}}不太容易出错。
答案 1 :(得分:0)
在处理特定编译器时可以使用#pragma once
,#pragma once
是非标准的,并且特定于某些特定的C编译器,而#ifndef / #define / #endif几乎适用于每个C编译器。 #pragma曾经减少了错误的可能性。
来自wiki:
在C和C ++编程语言中, #pragma once是非标准 但广泛支持预处理器指令旨在导致 当前源文件仅在单个编译中包含一次。 因此,#pragma曾经提供与#include guards相同的目的,但是 具有几个优点,包括:更少的代码,避免名称 冲突,有时提高编译速度。1
答案 2 :(得分:0)
理论上,#pragma once
平台特定和#ifndef
样式包含警卫唯一符合标准的方式,以确保通过预处理器的标头唯一性
然而,在实践中,所有主要编译器(gcc,Clang,Visual C ++,Intel)都支持所有主要平台(Linux,Windows,MacOSX)。也许一些较旧或模糊的编译器/平台组合会给你带来麻烦,但实际上它只是有效。但需要注意的是警告!
使用#pragma once
的主要优点是更容易进行重构,因为您不必将所有包含的保护名称与文件保持同步system(定义标题保护的一种常见样式指导义务)或使用伪随机字符串ID作为包含保护。