История изменений
Исправление SZT, (текущая версия) :
Типа
#define MACRO(a) \
do{ \
switch(sizeof(#a)) \
{ \
case 5: func(1, hex_to_char(#a[2], #a[3])); break; \
case 7: func(2, hex_to_char(#a[2], #a[3]), hex_to_char(#a[4], #a[5]));\
итд
} \
case 7 для «0x????» - шесть символов и нуль-терминирующий байт.
Из строки выковыриваем две буквы и конвертим в один байт некоей функцией hex_to_char, которую думаю ясно как написать. Если это дело все заинлайнит компилятор, проблем с оверхедом не будет.
Исправление SZT, :
Типа
#define MACRO(a) \
do{ \
switch(sizeof(#a)) \
{ \
case 5: func(1, hex_to_char(#a[2], #a[2])); break; \
case 7: func(2, hex_to_char(#a[2], #a[3]), hex_to_char(#a[4], #a[5]));\
итд
} \
case 7 для «0x????» - шесть символов и нуль-терминирующий байт.
Из строки выковыриваем две буквы и конвертим в один байт некоей функцией hex_to_char, которую думаю ясно как написать. Если это дело все заинлайнит компилятор, проблем с оверхедом не будет.
Исправление SZT, :
Типа
#define MACRO(a) \
do{ \
switch(sizeof(#a)) \
{ \
case 5: func(1, hex_to_char(#a[2], #a[2])); break; \
case 7: func(1, hex_to_char(#a[2], #a[3]), hex_to_char(#a[4], #a[5]));\
итд
} \
case 7 для «0x????» - шесть символов и нуль-терминирующий байт.
Из строки выковыриваем две буквы и конвертим в один байт некоей функцией hex_to_char, которую думаю ясно как написать. Если это дело все заинлайнит компилятор, проблем с оверхедом не будет.
Исправление SZT, :
Типа
#define MACRO(a) \
do{ \
switch(sizeof(#a)) \
{ \
case 5: func(1, hex_to_char(#a[2], #a[2])); break; \
case 7: func(1, hex_to_char(#a[2], #a[3]), hex_to_char(#a[4], #a[5]));\
итд
} \
case 7 для «0x????» - четыре символа и нуль-терминирующий байт.
Из строки выковыриваем две буквы и конвертим в один байт некоей функцией hex_to_char, которую думаю ясно как написать. Если это дело все заинлайнит компилятор, проблем с оверхедом не будет.
Исходная версия SZT, :
Типа
#define MACRO(a) \
do{ \
switch(sizeof(#a)) \
{ \
case 5: func(1, hex_to_char(#a[2], #a[2])); break; \
case 7: func(1, hex_to_char(#a[2], #a[3]), hex_to_char(#a[4], #a[5]));\
итд
} \
case 7 для «0x????» - четыре символа и нуль-терминирующий байт.
Из строки выковыриваем две буквы и конвертим в байт некоей функцией hex_to_char которую думаю ясно как написать. Если єто дело все заинлайнит компилятор, проблем не будет.