|
Программирование >> Арифметические и логические операции
Оператор 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 идент ( идент , идент ) строка символов где отсутствует пробел между первым идентификатором и скобка, является макроопределением с параметрами. Последующие вхождения первого идентификатора с идущими за ним (, последовательностью символов, разграниченной запятыми, и ), заменяются строкой символов, заданной в определении. Каждое местоположение идентификатора, замеченного в списке параметров определения, заменяется соответствующей строкой из вызова. Фактическими параметрами вызова являются строки символов, разделенные запятыми; однако запятые в строке, заключенной в кавычки, или в круглых скобках не являются разделителями параметров. Число формальных и фактических параметров должно совпадать. Строки и символьные константы в символьной строке сканируются в
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |