В редких случаях может быть полезно изменить строку, заданную __LINE__
, на что-то другое. Я видел, что GNU configure делает это для некоторых тестов, чтобы сообщать соответствующие номера строк после того, как он вставил вуду между строками, которые не отображаются в исходных файлах. Например:
#line 100
Следующие строки будут начинаться с __LINE__
100. При желании вы можете добавить новое имя файла
#line 100 "file.c"
Это редко полезно. Но если это необходимо, я не знаю альтернатив. На самом деле, вместо строки можно использовать макрос, который должен приводить к любой из двух вышеуказанных форм. Используя библиотеку препроцессора boost, вы можете увеличить текущую строку на 50:
#line BOOST_PP_ADD(__LINE__, 50)
Я подумал, что полезно упомянуть об этом, поскольку вы спрашивали об использовании __LINE__
и __FILE__
. В C ++ никогда не бывает достаточно сюрпризов:)
Редактировать: @Джонатан Леффлер приводит еще несколько хороших примеров использования в комментариях:
Работа с #line очень полезна для препроцессоров, которые хотят, чтобы ошибки, сообщаемые в коде C пользователя, соответствовали исходному файлу пользователя. Это делают препроцессоры ESQL / C от Yacc, Lex и (еще дома).