我希望这个问题在这个网站上之前没有被问过。我无法从谷歌中找到一个确切的答案。
当您在项目的多个文件中使用 #include iostream 时会发生什么?我总是在我的头文件中使用 #ifndef 和 #define。那是否可以防止 iostream 被包含多次?
我希望这个问题在这个网站上之前没有被问过。我无法从谷歌中找到一个确切的答案。
当您在项目的多个文件中使用 #include iostream 时会发生什么?我总是在我的头文件中使用 #ifndef 和 #define。那是否可以防止 iostream 被包含多次?
我对这个问题有两种解释:
iostream
吗?
iostream
?
#ifndef
和#endif
之间(或者在使用#pragma once
标记的头文件中,在支持它的编译器中)的任何内容被编译器看到超过一次…… 这就是 include guards 的作用,对吧?但是对于#include <iostream>
来说,这并不是必需的,因为它已经受到了多重包含的保护。#ifndef __IOSTREAM_H
#include <iostream>
#endif
...
似乎大多数标准头文件都有像上面那样的包含保护。
或者,您可以通过定义所需的宏来创建自己的包含保护。
无论如何,即使你使用了ifndef
,你仍然尝试多次包含它。因为多个文件只会被包含一次。并且所有的尝试都是为了包含<iostream>
,但如果你打开<iostream>
,它就有了。
#pragma once
#pragma once
是非标准的。 - chris#pragma once
。 - Zanven#pragma once
,因此它不可能强制要求在标准头文件中使用它。我找不到相关内容,但我想它肯定有规定实现必须保护标准头文件免受多次包含的影响,而如何实现则取决于实现者,如果实现支持,#pragma once
就是一种可能性。 - chris#pragma once
不是一个好的做法。这是直接从维基百科上得到的。#pragma once
是一种非标准但被广泛支持的预处理器指令,旨在使当前源文件在单个编译中仅被包含一次。因此,#pragma once
具有与#include
保护相同的目的,但具有几个优点,包括:更少的代码、避免名称冲突,有时可以提高编译速度。 - Zanven