C++ 编译器是否优化掉未使用的#include?

Chr*_*ris 2 c++ optimization include c-preprocessor

在构建不断增长的类/函数库时,我经常看到一种“伞”头文件,它 #includes 项目的所有常见头文件。例如:

dsp.h
#include "file1.h"
#include "file2.h"
...
#include "filex.h"
Run Code Online (Sandbox Code Playgroud)

有时我可能需要一切,但其他时候可能只需要选择一些功能/选项。例如,如果 #include dsp.h,但不使用 file2.h 中的任何内容,编译器知道吗?是否有可能在构建中对其进行优化?

否则,我的解决方案是将可选代码包装在预处理器指令中,然后定义我需要的内容。也许这是一个更安全、更有效的解决方案?

use*_*353 5

您是在谈论代码优化还是构建时间优化?

不必要的、未使用的标头不会更改正在生成的代码,因此这里不存在优化问题。

但是,这会增加构建时间。这没有通过构建工具进行优化。如果您希望优化构建时间,请参阅John Lakos撰写的《大规模 C++ 软件设计》一书。