Sign in Join
Wiki copytemporary

Program

Bahasa Indonesia · Deutsch · English · Français · Italiano · Português · Suomi · Русский

A program is either an executable program, that is, the complete and runnable application, or it is that portion of a Pascal Source code file or files that can be compiled and is not declared to be a unit or library. This is sometimes referred to as the main program.

Main program

program is a reserved word that introduces a classical program source code file:

pascal
program hiWorld(input, output, stdErr);

begin
    writeLn('Hi!');
end.

Meanwhile FPC discards the program header, i. e. the first line. The output file name is determined by the source code file’s name. However, the program name does become a reserved identifier (except in the ISO modes [since FPC 3.3.1/trunk revision #45757; cf. Issue #37322]). In the example above, e.g. attempting to define a constant named hiWorld would trigger a duplicate identifier compile time error. The program name will identify the global scope, thus it can be used to write fully-qualified identifiers.

The file descriptor list is completely ignored, except in {$mode ISO}. The text variables input, output and stderr are always opened and their names can not be changed in other modes. (cf.: SysInitStdIO is always called in rtl/linux/system.pp)

Therefore with FPC the following complete source code example compiles identically as does the previous example.

pascal
begin
    writeLn('Hi!');
end.

If the program is syntactically correct, FPC ignores anything that comes after the final end.. The following will compile without problems:

pascal
program awesomeProgram(input, output, stdErr);
begin
    writeLn('Awesome!');
end.I thank my mom, my dad, and everyone who supported me in making this program.

This “feature” is primarily used to supply an in-file changelog or copyright notice.

FPC does not support multiple modules in one source code file, like some other compilers did or do. Each module source code has to reside in its own file. However, the restriction that module names have to match file names does not apply to programs. This is due to the fact that programs cannot be included by other modules, thus searching them (via their file name) is not necessary.

Program structure

A program file has to follow a certain structure.

  1. A (depending on used compiler possibly optional) program header.
  2. There can be at most one uses-clause and it has to be at the top of the program right after the program header.
  3. Exactly one block that concludes with an end. (note the period). This block may contain – in contrast to regular blocks – resourcestring section(s).

The exact order and number of various sections after the (optional) uses-clause until final the compound statement begin…end. is free of choice.

However, there are some plausible considerations.

Taking all considerations into account the rough program structure should look like this (except for label and {$goto on} which are only mentioned for the sake of completeness):

delphi
program sectionDemo(input, output, stdErr);

// Global compiler directives ----------------------------
{$mode objFPC}
{$goto on}

uses
    sysUtils;

const
    answer = 42;

resourceString
    helloWorld = 'Hello world!';

type
    primaryColor = (red, green, blue);

procedure doSomething(const color: primaryColor);
begin
end;

// M A I N -----------------------------------------------
var
    i: longint;

threadVar
    z: longbool;

label
    42;
begin
end.

[The example consciously ignores the possibility of “typed constants”, sticking rather to traditional concepts than unnecessarily confusing beginners.]

See also


From the Free Pascal wiki, page "Program", as it stood on 2022-09-02 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.