15

你能推荐我为了用 C 编写一个组织良好的代码我应该阅读/学习什么吗?

我想学习的一件事是在 .h 和 .c 文件中拆分项目的原则,去哪里以及为什么,变量命名,何时使用全局变量......

我对处理这个特定问题的书籍和文章感兴趣。

4

4 回答 4

13

John Lakos 所著的《Large Scale C++ Software Design》是一本涵盖很多内容的好书(适用于 C 和 C++):

此外,要记住的一个好的经验法则是“永远不要做任何在头文件中分配内存的事情”

于 2009-01-28T19:37:05.500 回答
3

关于文件布局,没有太多选择。

分区通常是以下之一(这里的包是单个库或二进制文件):

  1. .../project/.../package/module.{c,h}
  2. .../project/.../{src,include}/package/module.{c,h} // 非接口头文件转到src
  3. .../project/.../package/{src,include}/module.{c,h} // 非接口头文件转到src

分区 (1) 很方便,因为属于特定包的所有文件都存储在一个目录中,因此可以轻松地移动包,但是通过这种方法将 API 标头与私有标头分离并检测 API 更改并非易事。(2) 和 (3) 非常相似,它们使 API 发布和 API 更改检测变得微不足道,而 (2) 在您总是发布整个项目的情况下稍微容易一些, (3) 当您发布单个包时稍微好一些(例如用于修补目的)

在任何 C/C++ 项目中,通常都有以下常用包:

  1. 常用宏和数据类型
  2. 记录包
  3. 应用程序引导包(如果项目中有超过 1 个二进制文件)。
于 2010-05-20T11:21:13.773 回答
2

特定于 unix(而不是cnatch),但仍然如此:

递归使被认为是有害的

使用所描述的构建结构,您可以使用大量文件。所以每个逻辑单元都有一个头文件和一个源文件。

于 2009-01-28T20:01:26.543 回答
1

我认为你将在这个主题上获得的最好的教育读物是阅读 Linux Kernel 源代码之类的东西。它有一个很好的源代码布局,基本上是标准的大型 C 项目。这里也是关于如何为 BSD 源代码组合源文件的指南。

说真的,只需开始阅读内核源代码并了解所有内容是如何组合在一起的。显然,这是一个计划得很好的项目。

于 2009-01-28T19:33:27.957 回答