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

Поделись знанием:
Перейти к: навигация, поиск

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

Turbo Pascal

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

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

См. также

Напишите отзыв о статье "Объявление (информатика)"

Ссылки

  • [www.cyberguru.ru/programming/cpp/cpp-programming-guide-page55.html Программирование на языке С. Объявления функций]  (рус.)
  • [www.cyberguru.ru/programming/cpp/cpp-velvet-way-page18.html C++. Бархатный путь. Объявление переменных]  (рус.)
  • [www.cyberguru.ru/programming/cpp/cpp-velvet-way-page79.html C++. Бархатный путь. typedef-объявление]  (рус.)


Отрывок, характеризующий Объявление (информатика)

«Как она молилась! – вспомнил он. – Видно было, что вся душа ее была в молитве. Да, это та молитва, которая сдвигает горы, и я уверен, что молитва ее будет исполнена. Отчего я не молюсь о том, что мне нужно? – вспомнил он. – Что мне нужно? Свободы, развязки с Соней. Она правду говорила, – вспомнил он слова губернаторши, – кроме несчастья, ничего не будет из того, что я женюсь на ней. Путаница, горе maman… дела… путаница, страшная путаница! Да я и не люблю ее. Да, не так люблю, как надо. Боже мой! выведи меня из этого ужасного, безвыходного положения! – начал он вдруг молиться. – Да, молитва сдвинет гору, но надо верить и не так молиться, как мы детьми молились с Наташей о том, чтобы снег сделался сахаром, и выбегали на двор пробовать, делается ли из снегу сахар. Нет, но я не о пустяках молюсь теперь», – сказал он, ставя в угол трубку и, сложив руки, становясь перед образом. И, умиленный воспоминанием о княжне Марье, он начал молиться так, как он давно не молился. Слезы у него были на глазах и в горле, когда в дверь вошел Лаврушка с какими то бумагами.
– Дурак! что лезешь, когда тебя не спрашивают! – сказал Николай, быстро переменяя положение.
– От губернатора, – заспанным голосом сказал Лаврушка, – кульер приехал, письмо вам.
– Ну, хорошо, спасибо, ступай!
Николай взял два письма. Одно было от матери, другое от Сони. Он узнал их по почеркам и распечатал первое письмо Сони. Не успел он прочесть нескольких строк, как лицо его побледнело и глаза его испуганно и радостно раскрылись.
– Нет, это не может быть! – проговорил он вслух. Не в силах сидеть на месте, он с письмом в руках, читая его. стал ходить по комнате. Он пробежал письмо, потом прочел его раз, другой, и, подняв плечи и разведя руками, он остановился посреди комнаты с открытым ртом и остановившимися глазами. То, о чем он только что молился, с уверенностью, что бог исполнит его молитву, было исполнено; но Николай был удивлен этим так, как будто это было что то необыкновенное, и как будто он никогда не ожидал этого, и как будто именно то, что это так быстро совершилось, доказывало то, что это происходило не от бога, которого он просил, а от обыкновенной случайности.
Тот, казавшийся неразрешимым, узел, который связывал свободу Ростова, был разрешен этим неожиданным (как казалось Николаю), ничем не вызванным письмом Сони. Она писала, что последние несчастные обстоятельства, потеря почти всего имущества Ростовых в Москве, и не раз высказываемые желания графини о том, чтобы Николай женился на княжне Болконской, и его молчание и холодность за последнее время – все это вместе заставило ее решиться отречься от его обещаний и дать ему полную свободу.
«Мне слишком тяжело было думать, что я могу быть причиной горя или раздора в семействе, которое меня облагодетельствовало, – писала она, – и любовь моя имеет одною целью счастье тех, кого я люблю; и потому я умоляю вас, Nicolas, считать себя свободным и знать, что несмотря ни на что, никто сильнее не может вас любить, как ваша Соня».
Оба письма были из Троицы. Другое письмо было от графини. В письме этом описывались последние дни в Москве, выезд, пожар и погибель всего состояния. В письме этом, между прочим, графиня писала о том, что князь Андрей в числе раненых ехал вместе с ними. Положение его было очень опасно, но теперь доктор говорит, что есть больше надежды. Соня и Наташа, как сиделки, ухаживают за ним.
С этим письмом на другой день Николай поехал к княжне Марье. Ни Николай, ни княжна Марья ни слова не сказали о том, что могли означать слова: «Наташа ухаживает за ним»; но благодаря этому письму Николай вдруг сблизился с княжной в почти родственные отношения.
На другой день Ростов проводил княжну Марью в Ярославль и через несколько дней сам уехал в полк.


Письмо Сони к Николаю, бывшее осуществлением его молитвы, было написано из Троицы. Вот чем оно было вызвано. Мысль о женитьбе Николая на богатой невесте все больше и больше занимала старую графиню. Она знала, что Соня была главным препятствием для этого. И жизнь Сони последнее время, в особенности после письма Николая, описывавшего свою встречу в Богучарове с княжной Марьей, становилась тяжелее и тяжелее в доме графини. Графиня не пропускала ни одного случая для оскорбительного или жестокого намека Соне.
Но несколько дней перед выездом из Москвы, растроганная и взволнованная всем тем, что происходило, графиня, призвав к себе Соню, вместо упреков и требований, со слезами обратилась к ней с мольбой о том, чтобы она, пожертвовав собою, отплатила бы за все, что было для нее сделано, тем, чтобы разорвала свои связи с Николаем.
– Я не буду покойна до тех пор, пока ты мне не дашь этого обещания.
Соня разрыдалась истерически, отвечала сквозь рыдания, что она сделает все, что она на все готова, но не дала прямого обещания и в душе своей не могла решиться на то, чего от нее требовали. Надо было жертвовать собой для счастья семьи, которая вскормила и воспитала ее. Жертвовать собой для счастья других было привычкой Сони. Ее положение в доме было таково, что только на пути жертвованья она могла выказывать свои достоинства, и она привыкла и любила жертвовать собой. Но прежде во всех действиях самопожертвованья она с радостью сознавала, что она, жертвуя собой, этим самым возвышает себе цену в глазах себя и других и становится более достойною Nicolas, которого она любила больше всего в жизни; но теперь жертва ее должна была состоять в том, чтобы отказаться от того, что для нее составляло всю награду жертвы, весь смысл жизни. И в первый раз в жизни она почувствовала горечь к тем людям, которые облагодетельствовали ее для того, чтобы больнее замучить; почувствовала зависть к Наташе, никогда не испытывавшей ничего подобного, никогда не нуждавшейся в жертвах и заставлявшей других жертвовать себе и все таки всеми любимой. И в первый раз Соня почувствовала, как из ее тихой, чистой любви к Nicolas вдруг начинало вырастать страстное чувство, которое стояло выше и правил, и добродетели, и религии; и под влиянием этого чувства Соня невольно, выученная своею зависимою жизнью скрытности, в общих неопределенных словах ответив графине, избегала с ней разговоров и решилась ждать свидания с Николаем с тем, чтобы в этом свидании не освободить, но, напротив, навсегда связать себя с ним.
Хлопоты и ужас последних дней пребывания Ростовых в Москве заглушили в Соне тяготившие ее мрачные мысли. Она рада была находить спасение от них в практической деятельности. Но когда она узнала о присутствии в их доме князя Андрея, несмотря на всю искреннюю жалость, которую она испытала к нему и к Наташе, радостное и суеверное чувство того, что бог не хочет того, чтобы она была разлучена с Nicolas, охватило ее. Она знала, что Наташа любила одного князя Андрея и не переставала любить его. Она знала, что теперь, сведенные вместе в таких страшных условиях, они снова полюбят друг друга и что тогда Николаю вследствие родства, которое будет между ними, нельзя будет жениться на княжне Марье. Несмотря на весь ужас всего происходившего в последние дни и во время первых дней путешествия, это чувство, это сознание вмешательства провидения в ее личные дела радовало Соню.
В Троицкой лавре Ростовы сделали первую дневку в своем путешествии.
В гостинице лавры Ростовым были отведены три большие комнаты, из которых одну занимал князь Андрей. Раненому было в этот день гораздо лучше. Наташа сидела с ним. В соседней комнате сидели граф и графиня, почтительно беседуя с настоятелем, посетившим своих давнишних знакомых и вкладчиков. Соня сидела тут же, и ее мучило любопытство о том, о чем говорили князь Андрей с Наташей. Она из за двери слушала звуки их голосов. Дверь комнаты князя Андрея отворилась. Наташа с взволнованным лицом вышла оттуда и, не замечая приподнявшегося ей навстречу и взявшегося за широкий рукав правой руки монаха, подошла к Соне и взяла ее за руку.
– Наташа, что ты? Поди сюда, – сказала графиня.
Наташа подошла под благословенье, и настоятель посоветовал обратиться за помощью к богу и его угоднику.
Тотчас после ухода настоятеля Нашата взяла за руку свою подругу и пошла с ней в пустую комнату.
– Соня, да? он будет жив? – сказала она. – Соня, как я счастлива и как я несчастна! Соня, голубчик, – все по старому. Только бы он был жив. Он не может… потому что, потому… что… – И Наташа расплакалась.
– Так! Я знала это! Слава богу, – проговорила Соня. – Он будет жив!
Соня была взволнована не меньше своей подруги – и ее страхом и горем, и своими личными, никому не высказанными мыслями. Она, рыдая, целовала, утешала Наташу. «Только бы он был жив!» – думала она. Поплакав, поговорив и отерев слезы, обе подруги подошли к двери князя Андрея. Наташа, осторожно отворив двери, заглянула в комнату. Соня рядом с ней стояла у полуотворенной двери.
Князь Андрей лежал высоко на трех подушках. Бледное лицо его было покойно, глаза закрыты, и видно было, как он ровно дышал.