| Папка |
Подпапка |
Описание |
Разделы главы |
| Неочевидные особенности целых чисел |
Assignment1 |
Пример потери значения при присваивании беззнаковой переменной отрицательного значения |
3.1.2. Выход за пределы диапазона при присваивании |
| Assignment2 |
Пример потери значения при присваивании переменной значения, большего, чем допускается типом |
3.1.2. Выход за пределы диапазона при присваивании |
| Overflow1 |
Пример перехода беззнакового значения через ноль при вычитании |
3.1.3. Переполнение при арифметических операциях |
| Overflow2 |
Пример невозможности контроля переполнения с помощью опции {$R+}при использовании функции Dec |
3.1.3. Переполнение при арифметических операциях |
| Compare1 |
Пример корректного сравнения знакового и беззнакового числа |
3.1.4. Сравнение знакового и беззнакового числа |
| Compare2 |
Пример некорректного сравнения знакового и беззнакового числа при использовании приведения типов |
3.1.4. Сравнение знакового и беззнакового числа |
| ForRange |
Пример неправильного вычисления границы диапазона цикла forпри использовании беззнаковой управляющей переменной |
3.1.5. Неявное преобразование в цикле for |
| Неочевидные особенности вещественных чисел |
WrongValue |
Пример присваивания вещественной переменной значения, отличного от заданного в программе |
3.2.6. "Неправильное" значение |
| Compare1 |
Пример ошибки при сравнении вещественной переменной и вещественного литерала |
3.2.7. Сравнение |
| Compare2 |
Пример ошибки при сравнении вещественных переменных разных типов |
3.2.8. Сравнение разных типов |
| Subtraction |
Пример накопления ошибки при многократном вычитании |
3.2.9. Вычитание в цикле |
| Epsilon |
Примет поиска машинного эпсилон (минимального числа, которое при добавлении к единице дает значение, отличное от единицы) |
3.2.12. Машинное эпсилон |
| Тонкости работы со строками |
Constants |
Пример, позволяющий исследовать, где в различных ситуациях хранятся строковые литералы и как они присваиваются переменным |
3.3.2. Хранение строковых литералов |
| PCharLit |
Пример, демонстрирующий, что явное приведение строковых литералов к типу PCharв большинстве случаев бесполезно, а иногда приводит к ошибке |
3.3.3. Приведение литералов к типу PChar |
| Comparisons |
Пример, демонстрирующий то, как в различных ситуациях компилятор сравнивает строки |
3.3.4. Сравнение строк |
| SideChange |
Пример нежелательного изменения значения строковой переменной при низкоуровневом изменении значения другой строковой переменной |
3.3.5. Побочное изменение |
| Zero |
Пример, демонстрирующий невозможность правильного преобразования строки, содержащей символ #0, из AnsiStringв PChar |
3.3.6. Нулевой символ в середине строки |
| ZeroFind |
Пример неправильной работы функции AnsiPosсо строками, содержащими символ #0 |
3.3.6. Нулевой символ в середине строки |
| StringResult |
Пример, демонстрирующий особый способ хранения результата функции, возвращающей строковое значение |
3.3.7. Функция, возвращающая AnsiString |
| RecordReadWrite |
Примеры, демонстрирующие правильные и неправильные способы записи типов, содержащих строки, в поток |
3.3.8. Строки в записях |
| RecordCopy |
Пример, демонстрирующий возникновение нежелательных эффектов при низкоуровневом копировании записей, содержащих строки |
3.3.8. Строки в записях |
| Прочие подводные камни |
OpOrder |
Пример того, что компилятор может вычислять операнды бинарной операции в порядке, отличном от интуитивно ожидаемого |
3.4.1. Порядок вычисления операндов |
| UpDownDlg |
Пример зацикливания обработчика нажатия кнопки мыши компонента TUpDownиз-за неоправданного захвата мыши в монопольное использование |
3.4.2. Зацикливание обработчика TUpDown.OnClick при открытии диалогового окна в обработчике |
| CloseAV |
Пример возникновения ошибки в перекрытом методе WndProcиз-за неправильной реализации метода TCustomForm.Release |
3.4.3. Access violation при закрытии формы перекрытым методом WndProc |
| ClassName |
Пример, демонстрирующий где хранится имя оконного класса, возвращаемое функцией GetClassInfo, и как эта память может быть использована для других нужд раньше, чем указатель на нее покинет область видимости |
3.4.4. Подмена имени оконного класса, возвращаемого функций GetClassInfo |
| ListIndex |
Пример, демонстрирующий ошибку обращения к свойству TComboBox.Items.Objectsпри значении свойства, равном -1 |
3.4.6. Ошибка List index out of bounds при корректном значении индекса |
| WrongAnchors |
Пример того, что компоненты на форме располагаются не так, как предписывает свойство Anchors, если начальный размер формы во время выполнения программы не совпадает с размером, заданным при проектировании и методы борьбы с этой проблемой |
3.4.7. Неправильное поведение свойства Anchors |
| MethodPtrCmp |
Пример генерирования компилятором неправильного кода при сравнении указателей на методы и способ решения этой проблемы |
3.4.8. Ошибка при сравнении указателей на метод |
| ParentWnd |
Пример возникновения ошибки при использовании в деструкторе оконного компонента свойств, требующих существования окна |
3.4.10. Невозможность использования некоторых свойств оконного компонента |
| FrameDel |
Пример скрытой ошибки при использовании свойств, требующих существования окна, в деструкторе фрейма: исключение не возникает, но происходит утечка ресурсов |
3.4.10. Невозможность использования некоторых свойств оконного компонента |