#pragma once和#include guards有什么区别?

11 浏览
0 Comments

#pragma once和#include guards有什么区别?

这个问题已经有了答案

#pragma once作为安全的头文件保护吗?

我正在处理一个已知只能在Windows下运行且需要在Visual Studio编译的代码库(它与Excel紧密集成因此不会去其他地方)。我想知道是否应该使用传统的头文件保护还是使用#pragma once来保护我们的代码。我认为让编译器处理#pragma once会使编译更快,而且在复制和粘贴时也不容易出错。它还稍微更美观一些;)

注意:要获得更快的编译时间,我们可以使用冗余的头文件保护,但这会在包含的文件和包含的文件之间添加严密的耦合。通常这是可以接受的,因为保护应该基于文件名,只有在需要更改头文件名时才会更改。

admin 更改状态以发布 2023年5月20日
0
0 Comments

我想要在这个讨论中补充一下,我正在使用VS和GCC进行编译,过去使用了包含保护。我现在已经切换到使用#pragma once,而我所选择此项唯一的原因并不是因为性能、可移植性或标准,因为我并不在乎什么是标准,只要VS和GCC支持即可,原因只是:

#pragma once 减少了出现错误的可能性。

很容易复制粘贴一个头文件到另一个头文件中,并修改它以适应自己的需要,然后忘记更改包含保护的名称。一旦两者都被包含,就需要花费一些时间来跟踪错误,因为错误信息未必清晰明了。

0
0 Comments

我认为这不会显著降低编译时间,但是#pragma once在编译器中得到广泛支持,但实际上不是标准的一部分。预处理器可能会更快,因为它更容易理解您的确切意图。

#pragma once不太容易出错,并且输入的代码更少。

如果可能的话,请使用前向声明而不是在.h文件中包含,以加快编译速度。

我更喜欢使用#pragma once

请参阅这篇维基百科文章,了解可以同时使用两者的可能性。

0