gpt4 book ai didi

c++ - 我应该如何包含在我的静态库中?

转载 作者:行者123 更新时间:2023-11-28 01:40:53 24 4
gpt4 key购买 nike

我正在创建一个供其他人使用的静态库。这个静态库使用 Windows header ,并且在许多函数中它使用 Windows 定义,例如 DWORD、PDWORD、LPVOID 等。我希望这些在真正定义函数方面有点严格我的图书馆,减少误用。但是,如果我在我的静态库的头文件中包含 Windows 头文件,那么包含我的库的人将自动包含 Windows 头文件,而且我不认为这是执行此过程的正确方法,因为很多我通常包含在我的其他项目中的库也要求我包含正确的头文件。那么我应该如何“要求”使用我的库的人也包含 Windows header ,或者至少让我的库检查是否已经包含 Windows header ?这也适用于其他 header ,一般来说(即,如果我必须包含 iostream,那么我想检查是否已经包含 iostream header )。

本质上,我的静态库应该优先于用户的所有包含,还是根据用户已经包含的内容进行调整?如果用户包含我的库,是让他们只包含我的库的标题而不包含其他内容更好,还是有某种方法可以让用户包含他们除了我的库之外还需要的内容?

为了更加清晰:

#include "MyLibrary.h"
BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpvReserved) {
// Stuff
}

或者

#include <Windows.h>
#include "MyLibrary.h"
BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpvReserved) {
// Stuff
}

最佳答案

无论您包含多少次 Windows.h,它都已经将其内容包含在 #ifndef - #endif 构造中.如果它被包含一次,一些宏已经被定义并且头文件中的代码将不会被再次包含。

另一方面,如果你的库是静态的,它不再依赖任何外部代码,所有来自 Windows.h 的符号实际上都是库私有(private)的,其他任何东西都看不到.

EDIT :澄清您上次的编辑。

公共(public) API 应该在您的库的 .h 中。如果 Windows.h 不是您提供的 API 的一部分,您最好将它放在您的 .cc 中,因此,第二个选项。相反,如果在您的公共(public) API 的定义中使用了 Windows.h 中的某些定义,请将其包含在您的 .h 中。

关于c++ - 我应该如何包含在我的静态库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com