何时使用包括防护装置或 #pragma 一次C++
When to use include guards or #pragma once C++
在每个
头文件中使用您选择的包含保护和#pragma once
,还是仅使用带有类声明之类的内容?
我很想把它放在每个标题中,但我担心它是不必要的,只会增加编译时间。什么是良好做法或常见做法?
让我澄清一下:我理解两者之间的区别。我问的是,根据经验,程序员是在每个文件中使用它,还是只在那些需要它的文件中使用它。
总结 Galik 的评论和我意识到的:
包括守卫应该放在每个头文件中,以防将来发生冲突。此外,编译器处理包含保护所需的时间很短,这将使编译更快,因为不需要处理额外的标头。
#pragma once
是特定于编译器的,而正常的包括保护定义,应该适用于任何C ++预处理器。
因此,为了便于携带,始终坚持"你们好老"包括警卫成语。
使用包含保护对于防止代码中的多个符号声明错误至关重要。你不应该为假设或影响而烦恼,c++预处理器如何处理这个问题(现代的预处理器经过优化,可以有效地做到这一点)。
如果您希望代码可移植到所有C++编译器,则需要使用包含保护。如果你觉得你使用的编译器较差,并且受益于使用#pragma once
你也可以添加这个编译指示:编译器不理解它只会忽略它。就个人而言,我不介意使用#pragma once
.这是一个不存在的问题的解决方案:编译器绝对可以检测包含保护,以避免打开已经包含的文件。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 在C++中一次将矢量值写入多个文件
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 为什么 #pragma 一次不防范多个非 constexpr 定义?
- 使用 #pragma 一次,#ifndef 在同一文件中包含保护
- #pragma 一次位置:在 #include 之前或之后
- 一次使用#pragma有什么危险
- 实现递归函数,避免由 C++ 中 include 的循环调用(没有 #pragma 一次)引起的无限循环输入
- #pragma 一次与包括警卫
- #pragma 一次的问题
- 何时使用包括防护装置或 #pragma 一次C++
- 自动将 #pragma 一次添加到头文件
- 是否有充分的理由不在每个头文件中使用一次 #pragma
- 既然其他可滥用但有用的功能已经标准化了,为什么不#pragma一次呢
- 带ACK的Vim:搜索所有不以一次结尾的#pragma
- #pragma 一次不会阻止多个变量定义
- VS 2010 c++ LNK2005使用#pragma一次和#ifndef时的错误