Difference between revisions of "Program/ru"
Line 29: | Line 29: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Если программа синтаксически верна, FPC игнорирует все, что идет после финального <syntaxhighlight lang="pascal" inline>end.</syntaxhighlight>. Следующее будет скомпилировано без проблем: | |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
Line 35: | Line 35: | ||
begin | begin | ||
writeLn('Awesome!'); | writeLn('Awesome!'); | ||
− | end. | + | end. Я благодарю маму, папу и всех, кто поддерживал меня в создании этой программы. |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Эта «функция» в основном используется для предоставления журнала изменений в файле или уведомления об авторских правах. | |
− | FPC | + | FPC не поддерживает несколько модулей в одном файле исходного кода, как это делали или делают некоторые другие компиляторы. Исходный код каждого модуля должен находиться в отдельном файле. Однако ограничение, согласно которому имена модулей должны совпадать с именами файлов, не применяется к программам. Это связано с тем, что программы не могут быть включены другими модулями, поэтому их поиск (по имени файла) не требуется. |
− | |||
− | |||
− | |||
== Program structure == | == Program structure == |
Revision as of 18:35, 29 May 2022
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
Bahasa Indonesia (id) │
italiano (it) │
português (pt) │
русский (ru) │
Понятие программа означает либо исполняемая программа, т.е. самодостаточное и запускаемое приложение, либо часть файла (файлов) с исходным кодом на языке Pascal, который может быть скомпилирован и не объявлен в виде модуля или библиотеки. Иногда оно называется главной программой.
Главная программа
program
— это зарезервированное слово, которое представляет файл с исходным кодом классической программы:
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 следующий полный пример исходного кода компилируется так же, как и предыдущий пример.
begin
writeLn('Hi!');
end.
Если программа синтаксически верна, FPC игнорирует все, что идет после финального end.
. Следующее будет скомпилировано без проблем:
program awesomeProgram(input, output, stdErr);
begin
writeLn('Awesome!');
end. Я благодарю маму, папу и всех, кто поддерживал меня в создании этой программы.
Эта «функция» в основном используется для предоставления журнала изменений в файле или уведомления об авторских правах.
FPC не поддерживает несколько модулей в одном файле исходного кода, как это делали или делают некоторые другие компиляторы. Исходный код каждого модуля должен находиться в отдельном файле. Однако ограничение, согласно которому имена модулей должны совпадать с именами файлов, не применяется к программам. Это связано с тем, что программы не могут быть включены другими модулями, поэтому их поиск (по имени файла) не требуется.
Program structure
A program
file has to follow a certain structure.
- A (depending on used compiler possibly optional) program header.
- There can be at most one
uses
-clause and it has to be at the top of the program right after the program header. - 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.
- A
type
-section comes prior any section that can use types, e.g.var
-sections or routine declarations. - Since
goto
is known as the devil’s tool, alabel
-section, if any, is as close as possible to the statement-frame it is supposed to declare labels for. - Generally you go from general into specifics: For example a
var
-section comes in front of athreadVar
-section. Aconst
-section comes before aresourceString
-section. resourceString
-sections can be either static or global, that means they should appear relatively soon after theuses
-clause.- Direct usage of global variables in routines (or even the mere possibility) is considered as bad style. Instead, declare/define your routines prior any
var
-(like)-section. (beware: play it safe and set{$writeableConst off}
) - Global compiler directives, especially such that allow or restrict what can be written (e.g.
{$goto on}
allows the use ofgoto
) or implicitly add unit dependencies like{$mode objFPC}
should appear soon after the program header.
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):
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
- unit
- library
- program structure in the Object Pascal Introduction series
- § “Beginning” in the Pascal Programming book on Wikibooks.org