Книга: Linux программирование в примерах
4.3.2. Стиль сообщения об ошибках
4.3.2. Стиль сообщения об ошибках
Для использования в сообщениях об ошибках С предоставляет несколько специальных макросов. Наиболее широкоупотребительными являются __FILE__
и __LINE__
, которые разворачиваются в имя исходного файла и номер текущей строки в этом файле. В С они были доступны с самого начала. C99 определяет дополнительный предопределенный идентификатор, __func__
, который представляет имя текущей функции в виде символьной строки. Макросы используются следующим образом:
if (some_system_call(param1, param2) < 0) {
fprintf(stderr, "%s: %s (%s %d): some_system_call(%d, %d) failed: %sn",
argv[0], __func__, __FILE__, __LINE__,
param1, param2, strerror(errno));
return 1;
}
Здесь сообщение об ошибке включает не только имя программы, но также и имя функции, имя исходного файла и номер строки. Полный список идентификаторов, полезных для диагностики, приведен в табл. 4.2.
Таблица 4.2. Диагностические идентификаторы C99
Идентификатор | Версия С | Значение |
---|---|---|
__DATE__ |
C89 | Дата компиляции в виде «Mmm nn yyyy » |
__FILE_ |
Оригинальная | Имя исходного файла в виде «program.c » |
__LINE__ |
Оригинальная | Номер строки исходного файла в виде 42 |
__TIME__ |
C89 | Время компиляции в виде «hh:mm:ss » |
__func__ |
C99 | Имя текущей функции, как если бы было объявлено const char __func__[] = "name" |
Использование __FILE__
и __LINE__
было вполне обычно для ранних дней Unix, когда у большинства людей были исходные коды и они могли находить ошибки и устранять их. По мере того, как системы Unix становились все более коммерческими, использование этих идентификаторов постепенно уменьшалось, поскольку знание положения в исходном коде дает немного пользы, когда имеется лишь двоичный исполняемый файл.
Сегодня, хотя системы GNU/Linux поставляются с исходными кодами, указанный исходный код часто не устанавливается по умолчанию. Поэтому использование этих идентификаторов для сообщений об ошибках не представляет дополнительной ценности. GNU Coding Standards даже не упоминает их.
- 6.1. Ужасные истории об ошибках проектирования
- Стиль написания исходного кода
- Сообщения об ошибках gsec
- ЧАСТЬ 2 ОБМЕН СООБЩЕНИЯМИ
- Текстовые сообщения процедуры POST
- Обмен сообщениями в сети
- Распределенный обмен сообщениями
- Сокращения в SMS-сообщениях
- Пример неудачного электронного сообщения
- 10.1.2. Сообщения сервера
- Обмен сообщениями
- Создание и отправка почтового сообщения