用Pascal文件组织程序的标准做法是什么?

用Pascal文件组织程序的标准做法是什么?,pascal,fpc,Pascal,Fpc,我想知道源文件树在Pascal中是如何组织的。 从From FPC来看,程序和单元似乎必须完全包含在单个文件中(除非使用${INCLUDE}指令) 我可以想出几种组织节目的方法: 将所有内容都放在一个大文件中(真的不喜欢这样) 写几个大的单位档案 编写许多小的单元文件(可能会变成一堆依赖项) 编写几个大单元,但使用${INCLUDE} 对我来说,使用${INCLUDE}似乎有点像黑客,因为一个合适的模块系统应该使它变得不必要。另一方面,我担心单文件模块会 大到足以让人笨重 在实际项目中通常是

我想知道源文件树在Pascal中是如何组织的。 从From FPC来看,程序和单元似乎必须完全包含在单个文件中(除非使用
${INCLUDE}
指令)

我可以想出几种组织节目的方法:

  • 将所有内容都放在一个大文件中(真的不喜欢这样)
  • 写几个大的单位档案
  • 编写许多小的单元文件(可能会变成一堆依赖项)
  • 编写几个大单元,但使用
    ${INCLUDE}
对我来说,使用
${INCLUDE}
似乎有点像黑客,因为一个合适的模块系统应该使它变得不必要。另一方面,我担心单文件模块会 大到足以让人笨重


在实际项目中通常是如何做到这一点的?是否有我遗漏的选项?

如果您正确设计了应用程序,那么每个单元的大小都应该合理,并且有一个明确的用途。依赖项应该有一定的层次性,如果您的应用程序足够大,您总是可以将任意数量的密切相关的单元分组到一个库中。

绝对不需要使用单个文件,也不需要使用
{$INCLUDE}
,除非您有特定的需要

我有几个Delphi项目,它们是100多个独立的代码单元,根据需要使用,并在需要的地方添加相应的
使用
子句(
接口
实现
部分)。您也可以在FPC源代码中看到此模式:

unit One;

interface
  uses System;

type
  TSomeThing=class(TBaseThing)
  ...
  public
  ...
  private
  ...
  end;

implementation

uses
  Math;

....

将源代码分解为逻辑单元(例如,相互关联的类的单元、相互关联或依赖的类型、功能单元等)。在FP中有很多这样做的例子(它们遵循与Delphi的VCL/RTL相同的模式),以了解这通常是如何完成的。

-1在FPC中,它对.p文件也依赖于CRC和.inc文件的日期的情况没有帮助。与德尔福的一个不同之处是。谢谢你的否决票——我的回答一般是在帕斯卡语的背景下进行的,但显然上面的一些回答不适用于FPC。@保罗:我没有否决票,但你写的大部分内容十多年来都不适用于现代帕斯卡语。Wirth最初的Pascal可能是这样,但90年代早期的Turbo Pascal不需要担心通过将实现内容移动到包含文件来保存编译,而且在
接口
实现
部分中使用
uses
子句的时间也至少有那么长。(我唯一使用的
{$I…}
是为不同的编译器和RTL版本设置不同的
{$DEFINE}
s。)@KenWhite这是否意味着现代Pascal编译器在重新编译之前检查实现部分的更改(而不仅仅是比较访问时间)?@Stavan:不。这意味着现代Pascal编译器通常速度足够快,以至于编译本身没有意义,而
实现
接口
中的更改都需要重新编译/重新链接可执行文件才能运行代码。将
实现
详细信息移动到一个单独的文件中,并
{$I…}
将其包含到
接口
中,绝对没有任何好处。正如我所说,我只使用include文件来实现编译器/RTL的差异,这些差异无论如何都需要重新编译。