Sign in Join
Wiki copytemporary

Program/ru

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

Понятие программа означает либо исполняемая программа, т.е. самодостаточное и запускаемое приложение, либо часть файла (файлов) с исходным кодом на языке Pascal, который может быть скомпилирован и не объявлен в виде модуля или библиотеки. Иногда оно называется главной программой.

Главная программа

program — это зарезервированное слово, которое представляет файл с исходным кодом классической программы:

pascal
program hiWorld(input, output, stdErr);

begin
    writeLn('Hi!');
end.

Тем временем FPC отбрасывает заголовок программы, т.е. первую строку. Имя выходного файла определяется именем файла исходного кода. Однако имя программы становится зарезервированным идентификатором (за исключением режимов ISO [начиная с [FPC 3.3.1/trunk revision #45757; cf. Issue #37322]). В приведенном выше примере, например. попытка определить константу с именем hiWorld вызовет ошибку времени компиляции повторяющегося идентификатора. Имя программы идентифицирует глобальную область, поэтому его можно использовать для записи полных идентификаторов.

Список файловых дескрипторов полностью игнорируется, за исключением {$mode ISO}. Текстовые переменные input, output и stderr всегда открыты и их имена нельзя изменить в других режимах. (ср.: SysInitStdIO всегда вызывается в rtl/linux/system.pp)

Поэтому с помощью FPC следующий полный пример исходного кода компилируется так же, как и предыдущий пример.

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

Если программа синтаксически верна, FPC игнорирует все, что идет после финального end.. Следующее будет скомпилировано без проблем:

pascal
program awesomeProgram(input, output, stdErr);
begin
    writeLn('Awesome!');
end. ?? ?????????????????? ????????, ???????? ?? ????????, ?????? ?????????????????????? ???????? ?? ???????????????? ???????? ??????????????????.

Эта «функция» в основном используется для предоставления журнала изменений в файле или уведомления об авторских правах.

FPC не поддерживает несколько модулей в одном файле исходного кода, как это делали или делают некоторые другие компиляторы. Исходный код каждого модуля должен находиться в отдельном файле. Однако ограничение, согласно которому имена модулей должны совпадать с именами файлов, не применяется к программам. Это связано с тем, что программы не могут быть включены другими модулями, поэтому их поиск (по имени файла) не требуется.

Структура программы

Файл program должен иметь определенную структуру.

  1. Заголовок программы (в зависимости от используемого компилятора, возможно, необязательный).
  2. Может быть не более одного раздела uses-clause, и оно должно быть в верхней части программы сразу после заголовка программы.
  3. Ровно один блок, заканчивающийся end(обратите внимание на period). Этот блок может содержать — в отличие от обычных блоков — раздел(ы) resourcestring.

Точный порядок и количество различных разделов после (необязательного) предложения uses до окончательного составного оператора begin…end строго не определен.

Тем не менее, есть некоторые правдоподобные соображения.

Принимая во внимание все соображения, примерная структура программы должна выглядеть так (за исключением label и {$goto on}, которые упоминаются только для полноты картины):

delphi
program sectionDemo(input, output, stdErr);

// Глобальные директивы компилятора ----------------------------
{$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.

[Пример сознательно игнорирует возможность «типизированных констант», придерживаясь скорее традиционных концепций, чем невольно сбивает с толку новичков.]

См.также


From the Free Pascal wiki, page "Program/ru", as it stood on 2022-05-29 after a change by Zoltanleo, 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.