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