#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
Комментариев нет:
Отправить комментарий