首页 > 解决方案 > 当多个文件需要时在哪里插入#include C++

问题描述

假设我有 4 个源文件 main、aux1、aux2 和 aux3,它们都使用字符串,因此需要#include <string>.

主要的将包括 3 个辅助,因为它将使用它的功能,但任何辅助都不需要包括主要或任何其他辅助。

我应该在哪里包含字符串以及如何#pragma once帮助我解决这种情况?

标签: c++includeheader-filescompiler-optimizationpragma

解决方案


标题应包括他们使用的内容。从长远来看,偏离这一点会导致痛苦。因此:

// aux1.h
#include <string>

// aux2.h
#include <string>

// aux3.h
#include <string>

// main.cpp
#include "aux1.h"
#include "aux2.h"
#include "aux3.h"

原则上,您可以在包含其他头文件之前包含<string>in main,然后即使其他头文件不包含,代码也会编译<string>。但是,这非常脆弱,因为代码的正确性取决于包含的顺序。标题auxX.h应该是正确的,与其他标题是否已包含无关。

[...] 像#pragma 这样的东西曾经如何帮助我解决这种情况?

您应该为自己的标题使用标题保护,尽管<string>已经有标题保护并且多次包含它并不是您需要担心的事情。


推荐阅读