【问题标题】:Are header files same or different for multiple platforms?多个平台的头文件是相同还是不同?
【发布时间】:2015-12-17 10:13:01
【问题描述】:

当我们为 dll 或某些库创建头文件时。它具有特定于平台的代码。那么头文件通常是根据平台分发的吗?(Linux、Mac、Windows)

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

【问题讨论】:

  • 我同意这一点。我想知道我在项目中使用的第三方库。就像 C++ 和 wxwidgets 的 boost。为所有平台分发通用头文件是标准吗?
  • 如果你想知道 boost 和 wxwidgets,你为什么不看看它们的标题?
  • @nwp 我同意这一点。查看一个库 mite 的头文件并不表明所有相关的库头文件都是这样的。我正在考虑这些线路。

标签: c++ boost header-files


【解决方案1】:

在创建库时,通常最好在所有平台的头文件相同时进行。然而,对于大多数实用库来说,存在一些系统依赖关系,这些依赖关系要求不同。库的用户最好从一开始就与任何差异隔离开来,将平台细节封装到实现中可能是合理的,例如,使用 Private Implementation 习惯用法。

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

我对处理头文件差异的偏好是使用条件编译并保持相同的头文件和接口。在大多数情况下,我会尝试将条件编译的使用进一步集中到一个位置,以针对每个不同的实体尽可能避免条件编译:当需要另一种配置时,我希望更新尽可能少的位置。

【讨论】:

    【解决方案2】:

    理想情况下,头文件中接口的实现应该根据平台(Linux,Mac,Windows)不同。在标准实现中,头文件应该相同。 不同平台的代码使用编译标志分隔。 这是理想的情况,但是一些糟糕的库可能会有不同的标题。

    【讨论】:

    • 感谢 sachin 的回答,这很有帮助。有没有办法知道我要使用的第三方是否会根据平台分发常见或不同的头文件集,而不必自己查看头文件。
    • 我想说,标题理想地是相同的!但是,要在不同平台上以最佳方式工作,它们可能需要有所不同......
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多