Условный пример, есть группы макросов (таких групп около 20 по проекту + неизвестное количество из винапи):
#define DTR_CONTROL_DISABLE 0x00
#define DTR_CONTROL_ENABLE 0x01
#define DTR_CONTROL_HANDSHAKE 0x02
Может быть существует какой-либо способ при выводе на печать (в лог, в консоль) получить именно имя макроса, чтобы в логе было что-то вроде:
DtrControl: [0х01] DTR_CONTROL_ENABLE
Текущая реализация: функции
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);
}
Буду благодарен за любые советы как можно упростить, сделать понятнее, проще и читабельнее.
Ответ
Си - не мой основной язык, поэтому мой вариант может быть субоптимальным, но можно сделать нечто подобное на макросах:
#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
", FOO_STR(FOO_1));
printf("%s
", FOO_STR(FOO_2));
return 0;
}
Вывод:
[1] FOO_1
[2] FOO_2
Комментариев нет:
Отправить комментарий