C项目结构 - 每个模块的标题与一个大标题

fin*_*nnw 5 c coding-style header-files

我在编程生涯中曾经使用过很多C项目,头文件结构通常属于以下两种模式之一:

  1. 一个包含所有函数原型的头文件
  2. 一个.h文件的每个.c文件,包含仅模块中定义的功能的原型.

选项2的优点对我来说显而易见 - 它使得在多个项目之间共享模块更便宜,并使模块之间的依赖关系更容易看到.

但是选项1的优点是什么?它必须具有一些优势,否则就不会那么受欢迎.


这个问题适用于C++和C,但我从未在C++项目中看到#1.

#defines,structs等的放置也各不相同,但对于这个问题,我想关注函数原型.

unw*_*ind 8

我认为#1的主要动机是......懒惰.人们认为管理依赖关系要么太难了,将事物拆分成单独的文件可能会更加明显,并且/或者认为某种程度上"过度杀戮"是为了拥有单独的文件.

当然,它也常常是"历史原因"的情况,其中程序或项目从小的东西发展而来,没有人花时间重构头文件.

  • java 也可能犯此错误,例如“import java.io.*;” (2认同)

sha*_*oth 5

选项 1 允许将所有定义放在一处,这样您只需包含/搜索一个文件,而不必包含/搜索多个文件。如果您的系统作为库交付给第三方,则这种优势更加明显——他们不太关心您的库结构,他们只想能够使用它。

  • 即使在这种情况下,我认为您最好使用单独的包含并创建一个包含所有其他内容的标题。 (15认同)