多个文件中的#include <iostream> </iostream>

时间:2013-04-14 01:26:12

标签: c++ include iostream

我希望以前没有在这个网站上询问过这个问题。我无法从谷歌找到一个可靠的答案。

当你在一个项目的多个文件中#include iostream时会发生什么?我总是在头文件中使用#ifndef和#define。这是否会阻止iostream被多次包含?

4 个答案:

答案 0 :(得分:3)

我对这个问题有两种解释:

  1. 您可以在同一个编译单元中多次包含iostream吗?
    • 是的,安全。所有标准标题都包含防护装置,以便安全使用。
  2. 在您的代码中自己使用包含防护措施会阻止多次包含iostream吗?
    • 当然,它也会阻止#ifndef#endif之间的所有内容(或者在标有#pragma once的标题中,在支持它的编译器中)被编译器看到更多不止一次......这只是包括警卫在内的事情,对吧?但#include <iostream>并不真正需要这样做,因为它已经被多种内容所保护。

答案 1 :(得分:2)

像克里斯和哈罗根说的那样,是的,他们会阻止这一点。 #ifndef和#define是预处理器指令,并用英文翻译成

#ifndef(如果未定义)

#define(define)

因此,如果您创建一个标头,并且#include“myheader.h”两次,那么该文件将不会再次包含,因为您将其包含在if语句中,这将导致仅包含(并定义)该文件什么时候还没有被包括(定义)。

答案 2 :(得分:0)

不管。即使您使用ifndef,您仍会尝试多次包含它。因为多个文件将被包含一次。并且所有尝试都包含<iostream>,但如果您打开<iostream>

#pragma once

这基本上意味着它只会被包含一次。这不是建议的方法,以避免我在行业中找到的多个包含。因为很难知道它不会被再次包括在内。与在顶部和底部看到ifndef相比。

答案 3 :(得分:0)

#ifndef __IOSTREAM_H
#include <iostream>
#endif

...

似乎大多数标准标题都有如上所述的包含保护。

或者,您可以通过定义所需的宏来制作自己的包含警示。