Программирование >>  Арифметические и логические операции 

1 ... 8 9 10 [ 11 ] 12 13 14 ... 53


Оператор switch

Оператор switch вызывает передачу управления на один из нескольких операторов в зависимости от значения выражения. Он имеет вид

switch ( выражение ) оператор

Выражение должно быть целого типа или типа указателя. Любой оператор внутри оператора может быть помечен одним или более префиксом case следующим образом:

case константное выражение :

где константное выражение должно иметь тот же тип что и выражение-переключатель; производятся обычные арифметические преобразования. В одном операторе switch никакие две константы, помеченные case, не могут иметь одинаковое значение.

Может также быть не более чем один префикс оператора вида

default :

Когда выполнен оператор switch, проведено вычисление его выражения и сравнение его с каждой case константой.

Если одна из констант равна значению выражения, то управление передается на выражение, следующее за подошедшим префиксом case.

Если никакая case константа не соответствует выражению, и есть префикс default, то управление передается на выражение, которому он предшествует.

Если нет соответствующих вариантов case и default отсутствует, то никакой из операторов в операторе switch не выполняется.

Префиксы case и default сами по себе не изменяют поток управления, который после задержки идет дальше, перескакивая через эти префиксы.

Обычно зависящий от switch оператор является составным. В голове этого оператора могут стоять описания, но инициализации автоматических и регистровых переменных являются безрезультатными.

Оператор break

Оператор

break ;

прекращает выполнение ближайшего охватывающего while, do, for или switch оператора; управление передается на оператор, следующий за законченным.

Оператор continue

Оператор

continue ;

вызывает передачу управления на управляющую продолжением цикла часть наименьшего охватывающего оператора while, do или for; то есть на конец петли цикла. Точнее, в каждом из операторов

while (... ) do

for (... )

contin:; contin:; contin:;

while (...);

continue эквивалентно goto contin (За contin: следует пустой оператор).

Оператор return

Возврат из функции в вызывающую программу осуществляется с помощью оператора return, имеющего один из двух видов:

return ;

return выражение ;

Первый может использоваться только в функциях, не возвращающих значения, т.е. в функциях с типом возвращаемого значения void.

Вторая форма может использоваться только в функциях, не возвращающих значение; вызывающей функцию программе возвращается значение выражения.

Если необходимо, то выражение преобразуется, как это делается при присваивании, к типу функции, в которой оно возникло.

Обход конца функции эквивалентен возврату return без возвращаемого значения.



Оператор goto

Можно осуществлять безусловную передачу управления с помощью оператора

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

Идентификатор должен быть меткой, расположенной в текущей функции.

Помеченные операторы

Перед любым оператором может стоять префикс метка, имеющий

идентификатор :

который служит для описания идентификатора как метки. Метка используется только как объект для goto.

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

Пустой оператор

Пустой оператор имеет вид

Пустой оператор используется для помещения метки непосредственно перед } составного оператора или того, чтобы снабдить такие операторы, как while, пустым телом.

Оператор delete

Оператор delete имеет вид

delete выражение ;

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

Эффект от применения delete к указателю, не полученному из операции new, не определен. Однако, уничтожение указателя с нулевым значением безопасно.

Оператор asм

Оператор asm имеет вид

asm ( строка) ;

Смысл оператора asm не определен. Обычно он используется для передачи информации через компилятор ассемблеру.

Глава 23.

Внешние определения

Программа на C++ состоит из последовательности внешних определений. Внешнее определение описывает идентификатор как имеющий класс памяти static и определяет его тип. Спецификатор типа может также быть пустым, и в этом случае принимается тип int.

Область видимости внешних определений простирается до конца файла, в котором они описаны, так же, как действие описаний сохраняется до конца блока. Синтаксис внешних определений тот же, что и у описаний, за исключением того, что только на этом уровне и внутри описаний классов может быть задан код (текст программы) функции.

Определения функций

Определения функций имеют вид:

определение функции:

спецификаторы описания описатель функции opt инициализатор базово-го класса opt тело функции

Единственными спецификаторами класса памяти (sc-специфика-торами), допустимыми среди спецификаторов описания, являются extern, static, overload, inline и virtual.

Описатель функции похож на описатель функции, возвращающей

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

Описатель функции имеет вид:

описатель функции:

описатель ( список описаний параметров )

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



Тело функции имеет вид

тело функции: составной оператор

Вот простой пример полного определения функции:

int max (int a,int b,int c)

int m = (a > b) ? a : b; return (m > c) ? m : c;

Здесь

♦ int является спецификатором типа;

♦ max (int a, int b, int c) является описателем функции;

♦ { ... } - блок, задающий текст программы (код) оператора.

Поскольку в контексте выражения имя (точнее, имя как формальный параметр) считается означающим указатель на первый элемент массива, то описания формальных параметров, описанных как массив из ... , корректируются так, чтобы читалось указатель на ... .

Инициализатор базового класса имеет вид:

инициализатор базового класса: : ( список параметров opt )

Он используется для задания параметров конструктора базового класса в конструкторе производного класса.

Например:

struct base { base (int); ... };

struct derived : base { derived (int); ... };

derived.derived (int a) : (a+1) { ... }

derived d (10);

Конструктор базового класса вызывается для объекта d с параметром 11.

Определения внешних данных

Определения внешних данных имеют вид:

определение данных: описание

Класс памяти таких данных статический.

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

Глава 24.

Командные строки компилятора

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

Заметьте, что определения const и inline дают альтернативы для большинства использований #define.

Замена идентификаторов

Командная строка компилятора имеет вид:

#define идент строка символов и вызывает замену препроцессором последующих вхождений идентификатора, заданного строкой символов. Точка с запятой внутри (или в конце) строки символов является частью этой строки.

Строка:

#define идент ( идент , идент ) строка символов

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

Каждое местоположение идентификатора, замеченного в списке параметров определения, заменяется соответствующей строкой из вызова. Фактическими параметрами вызова являются строки символов, разделенные запятыми; однако запятые в строке, заключенной в кавычки, или в круглых скобках не являются разделителями параметров.

Число формальных и фактических параметров должно совпадать. Строки и символьные константы в символьной строке сканируются в



1 ... 8 9 10 [ 11 ] 12 13 14 ... 53

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика