В редких случаях может быть полезно изменить строку, которая дана __LINE__
чему-то еще. Я видел, что GNU настроить делает это, чтобы некоторые тесты сообщили о соответствующих номерах строки после того, как он ввел некоторый вуду между строками, которые не появляются в файлах первоисточника. Например:
#line 100
заставит следующие строки запуститься с __LINE__
100. Можно дополнительно добавить новое имя файла
#line 100 "file.c"
, Это только редко полезно. Но если это необходимо, нет никаких альтернатив, о которых я знаю. На самом деле, вместо строки, макрос может использоваться также, который должен привести к любой из вышеупомянутых двух форм. Пользуясь библиотекой препроцессора повышения, можно увеличить текущую строку 50:
#line BOOST_PP_ADD(__LINE__, 50)
я думал, что полезно упомянуть это, так как Вы спросили об использовании __LINE__
и __FILE__
. Каждый никогда не вытаскивает достаточно неожиданностей из C++:)
Редактирование: @Jonathan Leffler обеспечивает некоторые более хорошие примеры использования в комментариях:
Питание с #line очень полезно для препроцессоров, которые хотят сохранить ошибки сообщаемыми в коде C пользователя в соответствии с исходным файлом пользователя. Yacc, Закон, и (больше дома мне) препроцессоры ESQL/C делают это.
Как вы видите здесь приемлемый результат? Я бы подумал о написании нового Appender, который обертывает любое приложение, обращающееся к диску, и пытается сделать что-то разумное при обнаружении IOExceptions. Может быть, заставить его заключить базовые методы записи Appenders в блок try-catch и отправить вам или системному администратору электронное письмо.
ограничьте размер журналов и попробуйте использовать настраиваемое приложение для архивации журналов на резервную машину с большим объемом дискового пространства.