代码之家  ›  专栏  ›  技术社区  ›  teabot

C和/或Objective-C中的组头文件

  •  1
  • teabot  · 技术社区  · 17 年前

    我偶尔会纯粹使用头文件来导入一组相关的头文件,这些头文件描述了模块所有公共组件上的接口。这样做是为了方便。任何使用该模块的人只需要导入一个头文件。

    这种做法是否被推荐,如果是这样,这种做法有名字吗?我试图将头文件命名为明确表示它们是组导入的名称,并想知道是否有任何约定?

    3 回复  |  直到 17 年前
        1
  •  6
  •   Nikolai Ruhe    17 年前

    所有Cocoa框架都这样做:例如,AppKit.framework包含一个头名“AppKit.h”,这样就可以使用 #import <AppKit/AppKit.h> 。它只包含一个约180个标头导入语句的列表。

    我没有这个模式的名字,但我也在自己的库中使用它(静态或框架)。

        2
  •  1
  •   Dmitry    17 年前

    在Objective-C中,使用#import指令的情况要好一点,但是在C/C++中,这将是一件非常糟糕的事情,因为对这些头文件中描述的任何接口的任何更改都会触发所有.C/.cpp文件的不可避免的重建,包括您使用的文件。
    如果你在某个时候发现TDD之类的东西,或者至少只是单元测试,你就必须与这种标头引入的潜在的非常复杂的依赖关系作斗争。
    我个人建议避免这样的解决方案,除非你知道自己在做什么。

        3
  •  0
  •   Steve Melnikoff    17 年前

    没关系,但有一点需要注意:尽可能不要包含不需要的头文件。

    如果包含的标头较少,则对标头的依赖性较小,因此模块之间的依赖性也较小,如果标头更改,则需要重新编译的文件也较少。

    C中嵌入式系统的一种常见模式是有一个标头(由处理器制造商提供),其中包括定义处理器外围设备寄存器的所有单独标头,每个源文件中都包含一个标头。除此之外,源文件只包含它们实际需要的头文件。

    (在上面,“header”表示扩展名为.h的头文件,“included”表示#include预处理器指令)。