我大部分时间都没有使用lib链接和dll编码,最近当我这样做时,我意识到我的#include方式可能会出现问题。
以下是正确/可取的方式#include吗?
假设我有3个项目(1)dll_A(2)dll_B(3)exe_1。 dll_A取决于dll_B,exe_1取决于一个dll_A。
我的方式#include如下:
dll_B.h ----> no dependency
dll_B.cpp -----> #include dll_B.h
dll_A.h -------> #include dll_B.h
dll_A.cpp -------> #include dll_A.h
exe_1.h --------> #include dll_A.h
从这里可以看出,exe_1.h间接包含dll_b.h,这对我有点不好,因为我希望exe_1.h独立于dll_b.h ...但是,我不确定是否是可能的,因为exe_1链接到dll_b怎么办?
编辑:示例依赖
// dll_B.h
struct dataB{};
// dll_A.h
#include dll_B.h
dataB* A_function_ptr(); // (any difference for implementing PIMPL?)
dataB& A_function_ref();
dataB A_function_copy();
// exe_1.cpp
#include dll_A.h
// ... it seems naturally #include-sion of dll_B.h is necessary? Can it be avoided?
答案 0 :(得分:1)
如果dll_B只是dll-A的一个实现细节,那么不要在[dll_A.h]中包含[dll_B.h],只需在[dll_A.cpp]中包含它。
避免头部依赖可能需要稍微重新设计。
E.g。您可能想要考虑[{3}} [dll_A]。
如果不了解更多细节,就无法说明更多细节......: - )
干杯&第h。,
PS:链接与头文件无关,除了某些Windows编译器(特别是MSVC)之外,头文件可以包含#pragma
,导致自动链接到正确的库。