6

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

但是,在内部,编译器是否为#pragma once? 如果不是,编译器如何确保这样的头文件只包含一次?

4

3 回答 3

10

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

所以它在细节层面上与包含保护不一样,但它与包含保护具有相同的效果。它还降低了代码的可移植性,因为有很多编译器不支持这一点。

于 2013-07-19T15:05:41.737 回答
0

不,编译器不会添加包含防护,但这不重要,因为它不会再次包含同一个文件,所以它永远不会改变首先评估这些防护。

于 2013-07-19T15:02:31.537 回答
-3

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

但是如果我有一个名为“file_copy.h”的“file.h”的副本,如果它被包含,它将被打开。

于 2013-07-19T15:44:28.210 回答