多个平台的头文件是相同的还是不同的?

Are header files same or different for multiple platforms?

当我们为 dll 或某些 library.It 小程序创建头文件时,它们具有特定于平台的 code.So 通常头文件是根据平台分发的吗?(Linux,Mac,Windows)

boost库或者wxwidgets库的头文件呢?

理想情况下,header 文件中的接口实现应因平台而异(Linux、Mac、Windows)。在标准实现中,header 文件应该相同。 不同平台的代码使用编译标志分开。 那是理想的情况,但是一些糟糕的图书馆甚至可能有不同的 headers.

创建库时,通常最好 header 文件对于所有平台都 相同。然而,对于大多数实用的库,存在一些要求差异的系统依赖性。库的用户最好从任何差异开始,并且将平台细节封装到实现中可能是合理的,例如,使用 Private Implementation idiom。

如果系统依赖性蔓延到接口中,header 中的声明可能会有所不同。例如,访问网络基础设施的方式取决于系统,涉及的类型和函数调用因平台而异。如果数据结构直接嵌入 user-visible class(例如,提高性能)或从 header 调用函数,例如,因为它们是从函数模板调用的,则可能是差异。

我在处理 header 中的差异时倾向于使用条件编译并保持相同的 header 和接口。在大多数情况下,我尝试将条件编译的使用进一步集中到每个不同实体的一个位置,以尽可能避免条件编译:当需要另一个配置时,我想更新尽可能少的地方。