Самьюэл Алекс
Шрифт:
В Linux есть ряд других функций, предназначенных для генерирования временных файлов или их имен, в частности
2.2. Защита от ошибок
Написать программу, которая корректно работает при "разумном" использовании, — трудная задача. Написать программу, которая ведет себя "разумно" при возникновении ошибок, — еще труднее. В этом разделе описываются методики программирования, позволяющие выявлять ошибки на ранних стадиях и решать проблемы, возникающие в ходе выполнения программы.
В представленные ниже фрагменты программ сознательно не включены громоздкие коды проверки ошибок и восстановления после них. так как это привело бы к потере наглядности при рассмотрении основных методик. Тем не менее мы вернемся к данной теме в главе 11, "Демонстрационное Linux-приложение", где будут приведены полностью работающие программы.
2.2.1. Макрос assert
При написании программы следует помнить о том, что ошибки и непредвиденные ситуации могут радикально менять работу программы на самых ранних стадиях ее выполнения. Нужно стараться выявлять такие ошибки как можно раньше, на этапах разработки и отладки. Остальные ошибки, влияние которых на работу программы незначительно, обычно остаются незамеченными до тех пор, пока пользователи не начнут запускать программу.
Простейший способ выявления ненормальных ситуаций — стандартный макрос
Каждый вызов макроса
В программах, критических к требованиям производительности, проверки
В связи с тем что макрос
Предположим, к примеру, что в цикле вызывается функция
Позднее, забыв о данной особенности, программист решает, что проверки на этапе выполнения заметно снижают производительность программы и нужно перекомпилировать программу с включенной макроконстантой
Еще один важный момент: макрос
Дадим несколько полезных советов.
■ Проверяйте наличие пустых указателей, например в списке аргументов функции. Сообщение об ошибке, генерируемое строкой
более информативно, чем сообщение, выдаваемое в ответ на попытку раскрытия пустого указателя:
■ Проверяйте значения параметров функции. Например, если в функции предполагается, что параметр