我经常在" foo.cpp"的顶部看到人#include "foo.h"
。看起来你可以总是这样做,但人们不会这样做。所以选择背后一定有一些原因。
我应该在源文件(foo.cpp)中#include
何时return IntegrationFlows.from("FileContentChannel")
.handle(Http.outboundGateway("http://host:port/paymentinfo/")
.charset("UTF-8")
.httpMethod(HttpMethod.GET)
.headerMapper(headers)
.expectedResponseType(String.class))
.channel(MessageChannels.queue("APIResponseChannel"))
.get();
标题(foo.h)?
答案 0 :(得分:3)
将其置于顶部的原因只是检查其内容是否依赖于任何其他标头。例如:
// foo.h
void f(std::vector<int>& v);
// foo.cpp
#include <vector>
#include "foo.h"
// foo1.cpp
#include "foo.h"
#include <vector>
在foo.cpp中,没有问题:一切编译得很好。另一方面,foo1.cpp将无法编译,因为foo.h使用std::vector
而没有包含指令。
让每个头文件都可以自行编译,可以避免在与foo.cpp无关的文件中更改include伪指令时发生的神秘失败。这些有时难以识别,而且总是令人沮丧。
答案 1 :(得分:1)
如果您在标题中使用任何内容,则需要包含标题。
例如,如果您需要在main方法中创建foo someObject = new foo();
,则需要包含具有该类定义的标头foo.h
。
您只需要包含您知道将要使用的内容。
答案 2 :(得分:1)
您可以随时添加标题文件。
无论如何,假设您有一个类似于以下文件的文件main.h
:
#ifndef FOO_H
#define FOO_H
struct S { };
#endif
现在,正如你所提到的,这个main.cpp
工作得很好:
void f() { }
#include "foo.h"
int main() { f(); }
无论如何,如果我略微改变main.cpp
,它就不再起作用了:
void f() { S s{}; }
#include "foo.h"
int main() { f(); }
问题是S
在首次使用后被声明,并且在第一次遇到f
的定义时不可见。
因此,经验法则可以是 - 在你开始使用由该文件导入的东西(我说)之前包含一个标题。
无论如何,这可能会很快导致凌乱的文件,#include
指令四处传播,通常的做法就是将所有这些指针放在文件的顶部,这就是全部。