避免遗漏包含相同文件的最佳方法是什么?

What is the best way to avoid missincluding same files?

本文关键字:最佳 方法 是什么 文件 包含相      更新时间:2023-10-16

给定文件树:

DLL1
└───source
├───File1.h
└───SameHeader.h
DLL2
└───source
├───File2.h
└───SameHeader.h

File1 包含 SameHeader.h,这很好。 File2 包含无法编译的 File1,因为 "SameHeader.h" #include 现在指向 DLL2/source/SameHeader.h。有没有办法确保File1使用同一个dll中的文件?

当然 - 您可以将文件SameHeader.h放在单独的文件夹中(与源文件不同(,然后在要搜索的包含路径列表中指定该文件夹(在项目选项或编译器命令开关中(。

当然,您需要从每个源项目目录中删除文件SameHeader.h,或者优先使用单独文件夹中的文件目录。

因此,使用您的"文件树"图,我建议这样做:

DLL1
└───source
├───File1.h
DLL2
└───source
├───File2.h
Include
└───SameHeader.h

然后,可以将../Include添加到编译器的包含文件搜索路径中。如何做到这一点取决于您的编译器和/或环境,但它将类似于 MSVC 中的/I".._Include"开关或(可能(与 clang-I"../_Include"。这就是我在多项目解决方案中所做的,用于将由多个项目使用的所有头文件。

但是,如果您确实需要两个(不同的(SameHeader.h文件,那么也许应该在 File1 的#include "SameHeader.h"行中指定完整的路径名(或者至少是一个限定路径( - 类似于:#include "../../DLL1/source/SameHeader.h"(取决于文件和文件夹的确切布局(。