Объявление (информатика)

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

В языках программирования объявление (англ. 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).

Примеры объявлений в языках

Объявления переменных

Объявление переменной может содержать помимо самого объявления также инициализацию переменной, то есть указание первоначального значения переменной.

Си, C++

Объявления указываются:

  • вне функции, класса, метода для глобальных переменных
  • в начале блока инструкций { } для локальных переменных.
  • как выражение в последующих частях блока инструкций {} для локальных переменных (не для языка Си)
 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}

ПЛ/1

Объявление имеет вид инструкции DECLARE (или сокращенно DCL) и может быть указано в любом месте внутри блока (в ПЛ/1 таким блоком является или процедура от заголовка PROCEDURE до слова END или блок инструкций BEGINEND) и касается объектов, доступных в данном блоке. Язык имеет весьма расширенный синтаксис атрибутов и расширенный механизм подстановки атрибутов и неявных объявлений.

 Пример: PROC;
   ...
   /* Используем переменную X, объявленную далее */
   X=1;
   ...
   /* объявление в блоке может указываться при употреблении идентификатора но
      объявленная переменная должна быть доступна в начале блока */
   DCL X FIXED DECIMAL(5,0);
   ...
 END Пример;

Объявления меток

 {Pascal}
 program DclLabel;
   label Метка;
   …
 beginМетка: …;
   …
   goto Метка;
   …
 end.

Объявление модулей

Turbo Pascal

 program DclUnit;
   uses Crt, Graph, MyUnit;
   ...
 begin
   ...
    Write('Процедура использует модуль Crt');
   ...
 end.

Модула-2

 MODULE DclUnit;
   FROM InOut IMPORT
     Read, Write, ...;
   ...
   Write('Процедура использует модуль InOut');
   ...
 END DclUnit.


Объявления функций

Си, C++

В языках C, C++ объявление функций (также называется прототипом) обычно помещается в файлы заголовков, определяющих конкретные модули.

 /* прототип функции trunc */
 int trunc(double x);

Паскаль

Объявление функций применяется, когда функция должна быть вызвана, а не когда определяется.

 { Pascal }
 procedure Proc_1; forward;
 procedure Proc_2;
 begin
    …
    {Вызов процедуры, которая ещё не была определена,
     требует объявления}
    Proc_1; 
    …
 end;
 …
 {Последующее определение процедуры}
 procedure Proc_1;
 beginend;

Turbo Pascal

Объявление, предваряющее саму функцию, применяют так же, как и в Паскале. В Турбо Паскале объявления указывают также в модулях (собственное расширение Турбо Паскаля по отношению к Паскалю) в разделе interface.

 { Turbo Pascal }
 unit Пример;
 interface
   { объявление функции, доступной в других модулях и программах }
   function trunc(x : real): integer;
 implementation
   { определение объявленной выше функции
     так как параметры и возвращаемое значение были определены в объявлении,
     то функции в разделе interface не требуется их повторения  }
    function trunc;
    begin

См. также

Ссылки

en:Declaration (computer science) fr:Déclaration (informatique) hr:Deklaracija (računarstvo) pl:Deklaracja (informatyka) pt:Declaração (informática)

Личные инструменты

Served in 0.125 secs.