#pragma曾经添加包含警卫吗?

时间:2013-07-19 14:58:39

标签: c++ c

#pragma once不是标准的,但是受到gcc和VC ++等编译器的支持。它有助于避免包含警卫。

但是,在内部,编译器是否为#pragma once添加了包含保护?如果没有,编译器如何确保只包含一次这样的标题?

3 个答案:

答案 0 :(得分:10)

我确信它的工作方式与PHP中的include_once一样 - 有一个“已包含的文件”表。在这种情况下,编译器在列表中查找它将要包含的文件,如果已经包含文件,则不要再次包含它。如果编译器在处理文件时看到#pragma once,则将此文件添加到“已包含的文件”中。

所以它与细节级别的包含警卫不同,但它与包含警卫具有相同的效果。它还使代码不那么便携,因为有很多编译器不支持这个。

答案 1 :(得分:0)

不,编译器不会添加包含保护,但这不重要,因为它不会再包含相同的文件,所以它永远不会得到改变来首先评估这些保护。

答案 2 :(得分:-3)

将“#pragma once”添加到文件“file.h”时,编译器会帮助我们确保“file.h”只会打开。

但如果我复制了名为“file_copy.h”的“file.h”,如果包含它,它将被打开。