
- •1.K&r c. Ansi c и iso c. Стандарт c99
- •Структура компилятора
- •3.Проблемы использования языка Си.
- •5.Числовые константы. Символические константы.
- •6.Идентификаторы. Константные переменные. Основные типы.
- •7.Указатели. Ссылки. Изменение типа данных.
- •8.Одномерные массивы. Символьные массивы.
- •9.Многомерные массивы.
- •10.Структуры.
- •11.Ключевое слово union.
- •12.Переименование типов (typedef).
- •13.Выражения.
- •14.Арифметические операции. Логические операции.
- •15.Операции присвоения.
- •16.Операции отношения. Адресные операции.
- •Адресные операции
- •17.Операции “?:”, sizeof, (тип)
- •18.Составной оператор. Оператор-выражение.
- •19.Условный оператор if. Оператор-переключатель switch. Условный оператор if
- •If (условие) оператор_1; else оператор_2;
- •If (условие) { оператор_1; оператор_2; … }
- •Оператор варианта switch
- •20.Операторы циклов while и do-while.
- •21.Оператор цикла for. Оператор продолжения continue.
- •22.Определение функции. Оператор возврата return. Вызов функции.
- •23.Функция main.
- •24.Поименованные константы и замена идентификаторов. Макросы.
- •If (выражение)
- •25.Включение файлов. Условная компиляция. Включение файла
- •26.Команда error. Команда pragma.
- •27.Обработка особых ситуаций. Обработка try, перехват catch, Спецификация особой ситуации throw.
- •28.Функции-подстановки (inline).
- •29.Операция создания объекта new. Операция delete. Операция new
- •Операция delete
- •30.Инкапсуляция. Наследование.
- •31.Полиморфизм.
- •32.Классы. Члены класса.
- •33.Конструктор. Деструктор. Функции-члены.
- •34.Операция доступа к области видимости “::”. Указатель this.
26.Команда error. Команда pragma.
В языках программирования Си и C++ #pragma once — нестандартная, но широко распространенная препроцессорная директива, разработанная для контроля за тем, чтобы конкретный исходный файл при компиляции подключался строго один раз. То есть, #pragma once применяется для тех же целей, что и include guard, но требует меньше кода и не допускает возможности коллизии имён.
27.Обработка особых ситуаций. Обработка try, перехват catch, Спецификация особой ситуации throw.
Синтаксис исключений
Ключевое слово try служит для обозначения контролируемого блока — кода,
в котором может генерироваться исключение. Блок заключается в фигурные
скобки:
try{
}
Все функции, прямо или косвенно вызываемые из try-блока, также считаются
ему принадлежащими. Генерация (порождение) исключения происходит по ключевому слову throw, которое употребляется либо с параметром, либо без него:
throw [ выражение ];
Тип выражения, стоящего после throw, определяет тип порождаемого исключения.
При генерации исключения выполнение текущего блока прекращается, и происходит поиск соответствующего обработчика и передача ему управления. Как правило, исключение генерируется не непосредственно в try-блоке, а в функциях, прямо
или косвенно в него вложенных.
Не всегда исключение, возникшее во внутреннем блоке, может быть сразу правильно обработано. В этом случае используются вложенные контролируемые
блоки, и исключение передается на более высокий уровень с помощью ключевого слова throw без параметров.
Обработчики исключений начинаются с ключевого слова catch, за которым в
скобках следует тип обрабатываемого исключения. Они должны располагаться
непосредственно за try-блоком. Можно записать один или несколько обработчиков в соответствии с типами обрабатываемых исключений. Синтаксис обработчиков напоминает определение функции с одним параметром — типом исключения. Существует три формы записи:
catch(TMn имя){ ... /* тело обработчика */ }
catch(THn){ ... /* тело обработчика */ }
catch(...){ .. /* тело обработчика */ }
Первая форма применяется, когда имя параметра используется в теле обработчика для выполнения каких-либо действий — например, вывода информации об исключении. Вторая форма не предполагает использования информации об исключении, играет роль только его тип. Многоточие вместо параметра обозначает, что
обработчик перехватывает все исключения. Так как обработчики просматриваются в том порядке, в котором они записаны, обработчик третьего типа следует
помещать после всех остальных. Пример:
catchdnt 1){
... // Обработка исключений типа int
}
catch(const char *){
... // Обработка исключений типа const char*
}
catch(Overflow){
... // Обработка исключений класса Overflow
}
catch(...){
... // Обработка всех необслуженных исключений
}
После обработки исключения управление передается первому оператору, находя
щемуся непосредственно за обработчиками исключений. Туда же, минуя код
всех обработчиков, передается управление, если исключение в try-блоке не было
сгенерировано.