Книга: 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 даже не упоминает их.

Оглавление книги


Генерация: 3.917. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз