В общем, для макросов нет возможности сделать что-то подобное. (Но подробнее см. ниже.)
Макросы препроцессора теоретически являются концепцией времени компиляции. Фактически, в ранних реализациях C препроцессор был буквально отдельной программой, работающей в отдельном процессе и преобразовывающей код C с #include
, #define
и #ifdef
в код C без них. Фактический компилятор C видел только «предварительно обработанный» код.
Теоретически компилятор может каким-то образом сохранить некоторые записи определений макросов, возможно, для облегчения отладки. Я не знал ни о ком, кто делал это, хотя очевидно, что те, кто использует формат DWARF, действительно делают ! См. комментарии ниже и этот ответ.
Вы всегда можете написать свой собственный явный код для отслеживания определения определенных макросов. Например, я часто писал код, удлиняющий строки
void print_version()
{
printf("myprogram version %s", VERSION_STRING);
#ifdef DEBUG
printf(" (debug version)");
#endif
printf("\n");
}
Некоторые проекты имеют довольно сложные механизмы для отслеживания переключателей компиляции, которые действуют для конкретной сборки. Например, в проектах, управляемых скриптом configure
, часто имеется один файл, config.status
содержащий один единственный запись всех вариантов компиляции, для потомков.
person
Steve Summit
schedule
02.09.2019