Лекция 5 Compile time errors, runtime errors, undefined behavior
Ошибки компиляции (compile-time errors) возникают, когда программа пытается обратиться к необъявленной функции или переменной, неоднозначна или вызывает операцию над недопустимым типом. Такие ошибки делятся на лексические, синтаксические и семантические. Ошибки выполнения (runtime errors) появляются при запуске программы. Один из примеров — segmentation fault (SEGFAULT), который возникает при попытке доступа к памяти вне допустимого диапазона. Ещё одна ошибка — деление на ноль: попытка выполнить такое действие приводит к ошибке. Неопределённое поведение (undefined behavior) возникает, когда в одном выражении происходят два неупорядоченных изменения одной и той же переменной. Компилятор не может гарантировать порядок выполнения операций, что приводит к непредсказуемым результатам. Некоторые примеры неопределённого поведения: гонки данных ( конфликтующий доступ на чтение / запись из разных потоков исполнения ), доступ к памяти за пределами границ массива, переполнение знакового целого числа, разыменование нулевого указателя и другие. 00:00 Введение и структура лекции 02:23 Ошибки компиляции 03:42 Лексические ошибки 06:14 Синтаксические ошибки 08:11 Примеры ошибок 11:16 Чтение ошибок компиляции 13:23 Градуированная грамматика 14:16 Синтаксические ошибки 16:07 Семантические ошибки 18:52 Классификация ошибок компиляции 19:44 Ошибки доступа 20:44 Ошибки выполнения 23:15 Пример SEGFAULT 27:07 Деление на ноль 30:47 Ошибки времени выполнения 35:31 Преимущества компиляции 39:13 Неопределенное поведение 42:23 Примеры неопределенного поведения 44:17 Компилятор и условия задачи 46:01 Пример с переполнением int 49:56 Неопределенное поведение и оптимизатор 52:46 Конкурс на самый причудливый результат 55:12 Неопределенное поведение в C++ 57:01 Примеры неопределенного поведения 58:56 Специфическое и неопределенное поведение 01:02:58 Имплементационное поведение 01:03:53 Оптимизация и неопределенное поведение 01:07:01 Лирическое отступление 01:07:40 Введение в стадии компиляции и ворнинги 01:08:38 Примеры ворнингов 01:10:14 Примеры полезных ворнингов 01:12:12 Параметры компиляции для ворнингов 01:17:39 Флаг -Werror 01:22:16 Использование прагм в коде 01:22:54 Синтаксис прагм 01:24:32 Завершение первой главы 01:25:11 Домашние задания и экзамены
Ошибки компиляции (compile-time errors) возникают, когда программа пытается обратиться к необъявленной функции или переменной, неоднозначна или вызывает операцию над недопустимым типом. Такие ошибки делятся на лексические, синтаксические и семантические. Ошибки выполнения (runtime errors) появляются при запуске программы. Один из примеров — segmentation fault (SEGFAULT), который возникает при попытке доступа к памяти вне допустимого диапазона. Ещё одна ошибка — деление на ноль: попытка выполнить такое действие приводит к ошибке. Неопределённое поведение (undefined behavior) возникает, когда в одном выражении происходят два неупорядоченных изменения одной и той же переменной. Компилятор не может гарантировать порядок выполнения операций, что приводит к непредсказуемым результатам. Некоторые примеры неопределённого поведения: гонки данных ( конфликтующий доступ на чтение / запись из разных потоков исполнения ), доступ к памяти за пределами границ массива, переполнение знакового целого числа, разыменование нулевого указателя и другие. 00:00 Введение и структура лекции 02:23 Ошибки компиляции 03:42 Лексические ошибки 06:14 Синтаксические ошибки 08:11 Примеры ошибок 11:16 Чтение ошибок компиляции 13:23 Градуированная грамматика 14:16 Синтаксические ошибки 16:07 Семантические ошибки 18:52 Классификация ошибок компиляции 19:44 Ошибки доступа 20:44 Ошибки выполнения 23:15 Пример SEGFAULT 27:07 Деление на ноль 30:47 Ошибки времени выполнения 35:31 Преимущества компиляции 39:13 Неопределенное поведение 42:23 Примеры неопределенного поведения 44:17 Компилятор и условия задачи 46:01 Пример с переполнением int 49:56 Неопределенное поведение и оптимизатор 52:46 Конкурс на самый причудливый результат 55:12 Неопределенное поведение в C++ 57:01 Примеры неопределенного поведения 58:56 Специфическое и неопределенное поведение 01:02:58 Имплементационное поведение 01:03:53 Оптимизация и неопределенное поведение 01:07:01 Лирическое отступление 01:07:40 Введение в стадии компиляции и ворнинги 01:08:38 Примеры ворнингов 01:10:14 Примеры полезных ворнингов 01:12:12 Параметры компиляции для ворнингов 01:17:39 Флаг -Werror 01:22:16 Использование прагм в коде 01:22:54 Синтаксис прагм 01:24:32 Завершение первой главы 01:25:11 Домашние задания и экзамены
