在每个头文件中使用您选择的/两者都包含警卫和#pragma once
,或者只是那些带有类声明等内容的人,这是一种好习惯吗?
我很想把它放在每个标题中,但我担心它会被删除,只会增加编译时间。什么是好的做法或常见的做法?
让我澄清一下:我理解两者之间的区别。我问的是,经验丰富的程序员是否在每个文件中使用它,或者只是那些需要它的人。
答案 0 :(得分:8)
总结Galik的评论以及我意识到的事情:
如果将来某些事情发生冲突,则应在每个头文件中加入警戒。此外,编译器处理包含保护所花费的时间很短,因为不需要处理额外的标头,所以编译速度会更快。
答案 1 :(得分:6)
#pragma once
是特定于编译器的,而普通包含保护定义,应该适用于任何c ++预处理器。
因此,为了便于携带,总是坚持"ye good old" include guards成语。
使用包含警卫对于防止代码中出现多符号声明错误至关重要。您不应该对c ++预处理器如何处理这些假设或影响感到烦恼(现代的处理器非常优化以便有效地执行此操作)。
答案 2 :(得分:2)
如果您希望您的代码可以移植到所有C ++编译器,则需要使用包含警戒。如果您认为您使用的编译器较差且受益于#pragma once
的使用,您也可以添加此编译指示:编译器不了解它只会忽略它。就个人而言,我并不打算使用#pragma once
。它是一个不存在的问题的解决方案:编译器可以绝对检测包含保护,以避免打开已包含的文件。