#ifndef和#pragma之间有什么区别,“同一个文件”是什么意思?

时间:2014-03-05 09:18:09

标签: c++

我已经在网上研究过,有人说他们避免多次包含同一个文件,但我仍然不清楚相同文件的区别和含义。

谢谢你提前。

3 个答案:

答案 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作为包含保护。