ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1054867 Топик полностью
UniSoft (24.11.2020 13:22, просмотров: 235) ответил SciFi на Творческая задачка. Можно ли на Си придумать такой макрос, который из строки "abcd" сделает константу, пригодную для использования в метках case, чтобы было как "case 0x61626364", ну или "case 0x64636261", индейцы не принципиальны?
multicharacter character literal - 'blah' 

правда на него некоторые компиляторы будут warning'и сыпать...

типа: #2548-D: multicharacter character literal (potential portability problem)

#define SWAP32(x) (((x) & 0xff) << 24 | ((x) & 0xff00) << 8 | ((x) & 0xff0000) >> 8 | ((x) >> 24) & 0xff)

case SWAP32('blah'): (аналог тому, что выпривели).

Ну и как вариант: (и никаких ворнингов)

#define ABCD2INT(x) ((uint32_t)(((x)[0]<<24)+((x)[1]<<16)+((x)[2]<<8)+(x)[3]))

case ABCD2INT("blah"):

Правда не знаю на сколько это универсально...

ну и строка должна быть не менее 3х символов...