如果我在标题中有一个include语句,我是否需要将它放在源代码中?

时间:2014-01-02 06:18:25

标签: c++

Where to put include statements, header or source?进一步提出问题:

如果我在标题中已经有一个include语句,例如#include,我还需要把它放在源文件中吗?我可以在两个文件中使用#include进行编译,当我从源文件中删除#include时就可以了。

那么哪个更合适,还是真的不重要?

3 个答案:

答案 0 :(得分:2)

如果您的第一个包含文件依赖于第二个 - 例如,第一个包含文件引用类或第二个类型的typedef - 将第二个包含文件放在第一个包含文件中。如果他们是独立的。包括来自源文件。

为避免文件被包含两次时出现问题,人们经常提出

#ifndef INCLUDE_FILE_NAME_INCLUDED
#define INCLUDE_FILE_NAME_INCLUDED
.......
#endif

在包含文件的开头/结尾,所以即使你包含两次,也会在第二次定义INCLUDE_FILE_NAME_INCLUDED并且文件不会被评估两次。

答案 1 :(得分:1)

简短的回答:只把它放在你必须的地方。

如果您可以在没有#include指令的情况下进行编译,请执行此操作 否则,如果您只能在源文件中使用它进行编译,请执行此操作 否则,您必须将其放在标题中,但也不要将其放在源文件中。

更喜欢将它放在源文件而不是标题中的原因是为了不在#include标题的其他文件中创建不必要的依赖。

答案 2 :(得分:0)

#include级联。因此,如果您#include <iostream>file.h#include "file.h"file.cpp iostream,则file.cpp中会#include <iostream> ...

file.h

#include "file.h"

// iostream definitions are available.

file.cpp

#include

但是请记住linked question的教训:当标题本身需要导入的定义时,头文件中只有{{1}}。