Loading AI tools
Из Википедии, свободной энциклопедии
В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.
Возможно, эта статья содержит оригинальное исследование. |
В семействе языков BCPL, представителями которого являются C++ и Java, также можно указывать размер переменной при объявлении скалярного типа, массива или матрицы. В этом семействе объявления (уведомление о существовании и свойствах элемента) и определения (definitions) (обеспечивающие непосредственно саму реализацию) могут указываться независимо друг от друга. Объявления, в общем случае, указываются в заголовочных файлах, которые затем подключаются в других файлах, ссылающихся на них, для использования этих объявлений, но у них нет доступа к определению. Если определение типа не совпадает с ранее указанным объявлением этого элемента, то в этом случае компилятор выдает сообщение об ошибке.
Для переменных определения присваивают значения областям памяти, зарезервированным при объявлении. Для функций определения обеспечивают описание самого тела функции. При том, что переменная или функция могут объявляться много раз, как правило они определяются лишь один раз. Хотя, динамические языки, как например Javascript или Python, допускают переопределение функций.
Объявление, зачастую, используется для того, чтобы получить доступ к функции или переменной, определённым в другом исходном файле или библиотеке.
Ниже приведено несколько примеров использования объявлений в языке Си, не являющихся определениями:
extern char example1;
extern int example2;
void example3(void);
А теперь несколько примеров определений на языке Си:
char example1;
int example2 = 5;
void example3(void)
{
int x = 7;
}
В различных языках программирования требования, касающиеся объявления определённых программных объектов могут сильно различаться. В общем случае объявлению могут подвергаться следующие параметры:
В программировании, иногда, от объявления отличают определение, применительно к таким элементам как:
причём, объявление и определение могут объединяться или указываться отдельно в различных местах исходного кода (вплоть до разных файлов).
Объявление в исходном коде как правило должно предшествовать первому употреблению данного идентификатора в программе. Объявление представляет собой информацию для транслятора, которая сама по себе не генерирует исполняемого кода (но зачастую приводит к выделению памяти).
Синтаксис большинства языков программирования предусматривает указание объявления в определённом месте исходного кода. Это или специальная секция программы (модуля, подпрограммы, пакета), или начало определённого блока (то есть все объявления должны быть в тексте программы перед первой инструкцией данного блока).
Объявление может быть:
Неявные объявления используются в языках программирования, которые допускают употребление идентификатора без его явного объявления. В этом случае транслятор должен иметь механизм добавления к идентификатору атрибутов на основании определённых методов:
Неявные объявления могут приводить к ошибкам, например, буквенная ошибка в идентификаторе станет причиной новой переменной, тем самым возникнет ошибка в действии программы.
Явные декларации могут быть полными или частичными. Частичные объявления могут применяться в случаях:
EXTERNAL
может обозначать внешний объект (переменную, процедуру и т. п.), определённый в другом модуле, а отсутствие его указания будет означать внутренний объект (описываемый данным объявлением в данном модуле), причём, отсутствие явного указания атрибута возможно будет противоположно для EXTERNAL
(например, INTERNAL
);EXTERNAL
и INTERNAL
, причём, отсутствие явного указания противоположного атрибута для какого-либо из них, будет обозначать указание одного из их, например, INTERNAL
).Объявление переменной может содержать помимо самого объявления также инициализацию переменной, то есть указание первоначального значения переменной.
Объявления указываются:
int global_var;
main()
{
int y;
...
{
int z=1;
getch();
int x=5; /*не работает для языка Си*/
...
}
...
}
Объявления указываются в программе или её подпрограмме в спецификации блока, располагающемся между заголовком (программы, процедуры, функции, модуля (Турбо Паскаль)) и словом, обозначающим начало группы инструкции данного блока (begin
).
program Пример;
var globar_var;
...
procedure Licz();
var local_var;
begin
end; {procedure}
begin
end. {program}
Объявление имеет вид инструкции DECLARE
(или сокращенно DCL
) и может быть указано в любом месте внутри блока (в ПЛ/1 таким блоком является или процедура от заголовка PROCEDURE
до слова END
или блок инструкций BEGIN
… END
) и касается объектов, доступных в данном блоке. Язык имеет весьма расширенный синтаксис атрибутов и расширенный механизм подстановки атрибутов и неявных объявлений.
Пример: PROC;
...
/* Используем переменную X, объявленную далее */
X=1;
...
/* объявление в блоке может указываться при употреблении идентификатора но
объявленная переменная должна быть доступна в начале блока */
DCL X FIXED DECIMAL(5,0);
...
END Пример;
{Pascal}
program DclLabel;
label Метка;
…
begin
…
Метка: …;
…
goto Метка;
…
end.
program DclUnit;
uses Crt, Graph, MyUnit;
...
begin
...
Write('Процедура использует модуль Crt');
...
end.
MODULE DclUnit;
FROM InOut IMPORT
Read, Write, ...;
...
Write('Процедура использует модуль InOut');
...
END DclUnit.
В языках C, C++ объявление функций (также называется прототипом) обычно помещается в файлы заголовков, определяющих конкретные модули.
/* прототип функции trunc */
int trunc(double x);
Объявление функций применяется, когда функция должна быть вызвана, а не когда определяется.
{ Pascal }
procedure Proc_1; forward;
procedure Proc_2;
begin
…
{''Вызов процедуры, которая ещё не была определена,''
''требует объявления''}
Proc_1;
…
end;
…
{ Последующее определение процедуры }
procedure Proc_1;
begin
…
end;
Объявление, предваряющее саму функцию, применяют так же, как и в Паскале. В Турбо Паскале объявления указывают также в модулях (собственное расширение Турбо Паскаля по отношению к Паскалю) в разделе interface
.
{ Turbo Pascal }
unit Пример;
interface
{ объявление функции, доступной в других модулях и программах }
function trunc(x : real): integer;
implementation
{ определение объявленной выше функции
так как параметры и возвращаемое значение были определены в объявлении,
то функции в разделе interface не требуется их повторения }
function trunc;
begin
…
Для улучшения этой статьи желательно:
|
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.