【问题标题】:How to handle header name conflicts?如何处理标题名称冲突?
【发布时间】:2013-11-13 19:49:54
【问题描述】:

包含标题时如何处理名称冲突?

例如:

#include "config.h" // from lib a
#include "config.h" // from lib b

我现在可以处理类型和函数的名称冲突,如果我编写一个包装器...但是如何处理这样的冲突呢?有没有办法为这个问题编写一个包装器?

【问题讨论】:

    标签: c header include wrapper


    【解决方案1】:

    解决此问题的一种简单方法是在引号之间包含完整的文件路径。

    有点像

    #include "/liba/inc/config.h"
    

    另外,您没有指定您使用的编译器,但这里有一个线程可以处理与 GCC 完全相同的问题:How to resolve include file names conflicts in GCC?

    【讨论】:

    • 相对路径,例如liba/inc/config.h,通常是首选,因为它们允许通过更改编译器选项(标题搜索路径)而不是编辑源来适应位置的变化。跨度>
    【解决方案2】:

    除了使用头文件的显式路径外,您还可以考虑不在同一个源文件中公开两个头文件。例如,您将创建 b_config_provider.h 和 b_config_provider.c。 b_config_provider.c 将包括来自库 b 的 config.h 并将提供围绕这些设施的包装器(在 b_config_provider.h 中公开包装 API)。这显然有些涉及,但它最大限度地减少了潜在的冲突(以及未来冲突)。

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 2020-08-16
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多