我希望这个网站以前没有被问过。我无法从谷歌找到可靠的答案。
当您在项目的多个文件中#include iostream 时会发生什么?我总是在我的头文件中使用#ifndef 和#define。这是否会阻止 iostream 被多次包含?
我对这个问题有两种解释:
iostream
在同一个编译单元中包含多次吗?
iostream
被多次包含吗?
#ifndef
and之间的所有内容#endif
(或在标有 的标头中,在支持它的编译器中)......这正是包含警卫所做的,对吧?#pragma once
但这并不是真正需要的#include <iostream>
,因为它已经防止了多个包含。就像 chris 和 Haroogan 说的,是的,他们会阻止这种情况发生。#ifndef 和 #define 是预处理器指令,用英文翻译成
#ifndef(如果未定义)
#define(定义)
因此,如果您创建一个标头,并 #include "myheader.h" 两次,那么该文件将不会被再次包含,因为您将它包含在一个 if 语句中,这将导致该文件仅在它有时被包含(和定义)尚未包括(定义)。
不管。即使您使用ifndef
. 因为多个文件将被包含一次。并且所有尝试包括<iostream>
但如果你打开<iostream>
它有
#pragma once
这基本上意味着它只会被包含一次。这不是避免我在行业中发现的多个包含的建议方法。因为更难知道它不会再次被包含在内。与在顶部和底部看到 ifndef 相比。
#ifndef __IOSTREAM_H
#include <iostream>
#endif
...
似乎大多数标准标头都有一种如上所述的包含保护。
或者,您可以通过定义所需的宏来制作自己的包含防护。