Грамматическое определение инструкций языка C++ приведено ниже (opt означает “необязательный”).

инструкция:

  объявление

  { список_инструкции opt }

 try { список_инструкции opt } список_обработчиков

  выражение opt;

  инструкция_выбора

  инструкция_итерации

  инструкция_с_метками

  управляющая_инструкция

инструкция_выбора:

  if (условие) инструкция

  if (условие) инструкция else инструкция

  switch (условие) инструкция

инструкция_итерации:

  while (условие) инструкция

  do инструкция while (выражение);

  for (инструкция_инициализации_for условие opt; выражение opt) инструкция

инструкция_с_метками:

  case константное_выражение: инструкция

  default: инструкция

  identifier: инструкция

управляющая_инструкция:

  break; 

  continue;

  return выражение opt;

  goto идентификатор;

список_инструкции:

  инструкция список_инструкции opt

условие:

  выражение

  спецификатор_типа объявляемый_объект = выражение

инструкция_инициализации_for:

  выражение opt;

  спецификатор_типа объявляемый_объект = выражение;

список_обработчиков:

  catch (объявление_исключения) { список_инструкции opt }

  список_обработчиков список_обработчиков opt

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

• Итерация (for и while); см. раздел 4.4.2.

• Ветвление (if, switch, case и break); см. раздел 4.4.1. Инструкция break прекращает выполнение ближайшей вложенной инструкции switch, while, do или for. Иначе говоря, следующей будет выполнена инструкция, следующая за последней в теле одной из перечисленных выше инструкций.

• Выражения; см. разделы A.5 и 4.3.

• Объявления; см. разделы A.6 и 8.2.

• Исключения (try и catch); см. разделы 5.6 и 19.4.

Рассмотрим пример, созданный просто для того, чтобы продемонстрировать разнообразие инструкций (какую задачу они решают?).

int* f(int p[],int n)

{

  if (p==0) throw Bad_p(n);

  vector v;

  int x;

  while (cin>>x) {

    if (x==terminator) break; // выход из цикла while

    v.push_back(x);

  }

  for (int i = 0; i

    if (v[i]==*p)

      return p;

    else

      ++p;

  }

  return 0;

}

<p id="AutBody_Root598"><strong>A.7. Объявления</strong></p>

Объявление (declaration) состоит из трех частей:

• имя объявляемой сущности;

• тип объявляемой сущности;

• начальное значение объявляемой сущности (во многих случаях необязательное).

Мы можем объявлять следующие сущности:

• объекты встроенных типов и типов, определенных пользователем (раздел A.8);

• типы, определенные пользователем (классы и перечисления) (разделы A.10–А.11, глава 9);

• шаблоны (шаблонные классы и функции) (раздел A.13);

• альтернативные имена (раздел A.16);

• пространства имен (разделы A.15 и 8.7);

• функции (включая функции-члены и операторы) (раздел A.9, глава 8);

• перечисления (значения перечислений) (разделы A.11 и 9.5);

• макросы (разделы A.17.2 и 27.8).

<p id="AutBody_Root599"><strong>A.7.1. Определения</strong></p>

Определение с инициализацией, резервирующее область памяти или как-то иначе поставляющую компилятору всю информацию, необходимую для использования имени в программе, называется определением (definition). Каждый тип, объект и функция в программе должны иметь только одно определение. Рассмотрим примеры.

double f();               // объявление

double f() { /* ... */ }; // также определение

extern const int x;       // объявление

int y;                    // также определение

int z = 10;               // определение с явной инициализацией

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже