#pragma once
不是标准的,但是受到gcc和VC ++等编译器的支持。它有助于避免包含警卫。
但是,在内部,编译器是否为#pragma once
添加了包含保护?如果没有,编译器如何确保只包含一次这样的标题?
答案 0 :(得分:10)
我确信它的工作方式与PHP中的include_once
一样 - 有一个“已包含的文件”表。在这种情况下,编译器在列表中查找它将要包含的文件,如果已经包含文件,则不要再次包含它。如果编译器在处理文件时看到#pragma once
,则将此文件添加到“已包含的文件”中。
所以它与细节级别的包含警卫不同,但它与包含警卫具有相同的效果。它还使代码不那么便携,因为有很多编译器不支持这个。
答案 1 :(得分:0)
不,编译器不会添加包含保护,但这不重要,因为它不会再包含相同的文件,所以它永远不会得到改变来首先评估这些保护。
答案 2 :(得分:-3)
将“#pragma once”添加到文件“file.h”时,编译器会帮助我们确保“file.h”只会打开。
但如果我复制了名为“file_copy.h”的“file.h”,如果包含它,它将被打开。