Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Печать значений макросов в читаемом виде

#cpp #макросы


Условный пример, есть группы макросов (таких групп около 20 по проекту + неизвестное
количество из винапи): 

#define DTR_CONTROL_DISABLE    0x00
#define DTR_CONTROL_ENABLE     0x01
#define DTR_CONTROL_HANDSHAKE  0x02


Может быть существует какой-либо способ при выводе на печать (в лог, в консоль) получить
именно имя макроса, чтобы в логе было что-то вроде: 

DtrControl: [0х01] DTR_CONTROL_ENABLE


Текущая реализация: функции to_str, внутри у каждой из которых switch
блок, вида:

switch (dcb.fDtrControl)
{
case DTR_CONTROL_DISABLE:   tmp = "DTR_CONTROL_DISABLE";   break;
case DTR_CONTROL_ENABLE:    tmp = "DTR_CONTROL_ENABLE";    break;
case DTR_CONTROL_HANDSHAKE: tmp = "DTR_CONTROL_HANDSHAKE"; break;
default: tmp = QString("Unknown [%1]").arg(dcb.fDtrControl);
}


Буду благодарен за любые советы как можно упростить, сделать понятнее, проще и читабельнее.  
    


Ответы

Ответ 1



Си - не мой основной язык, поэтому мой вариант может быть субоптимальным, но можно сделать нечто подобное на макросах: #include #define FOO_1 1 #define FOO_2 2 #define STR_(x) #x #define STR(x) STR_(x) #define FOO_STR(x) "[" STR(x) "] " #x int main(void) { printf("%s\n", FOO_STR(FOO_1)); printf("%s\n", FOO_STR(FOO_2)); return 0; } Вывод: [1] FOO_1 [2] FOO_2

Комментариев нет:

Отправить комментарий