嵌套 header 包含会延长编译时间

Nested header inclusion prolongs compilation

在我的项目中,我使用了动态包含的 third-party 库 - i. e.通过导入 *.lib-file 和 *.h-file。 lib 的 *.h-file 有一个包含保护。我 #included 这个文件在我的一个项目 header 中,它从 #pragma once 开始。后者也包含在我项目的几个 *.cpp-files 中。

方案如下:

third-party 库包含 'blah_blah.h'

#ifndef BLAH_BLAH_H
#define BLAH_BLAH_H

/* stuff here */

#endif

我的项目header'my.h'

#pragma once
#include "blah_blah.h"

/* stuff here */

我的一个 cpp 文件

#include "my.h"

/* stuff here */

问题如下。尽管在编译过程中既没有错误也没有警告,但我看到 "blah_blah.h" 被多次包含 - 至少,由其代码产生的警告出现在 [=43= 的输出 window 中] 2017 年大约 5 次,汇编持续到永远。我该怎么做才能避免这种情况?

is also included in several *.cpp-files of my project.

如果您编译例如 2 个源代码,包括直接或间接包含您的 header,那么一个源代码将总共包含 2 次。保护只针对一个源文件,每次编译器移动到另一个源文件编译none的header都是已知的。否则这意味着编译的源文件的顺序是相关的,这是不可能管理的,这是 makefile 的结尾并强制重新编译所有文件,无论你是什么文件已修改。

除此之外,您错过了 header 文件末尾的 #endif