Я повторю, void* допускает слишком широкие неявные преобразования, что практически аннулирует для него контроль типов и соответственно опечаток и ошибок. Да, механизм стандартный, но отсутствие контроля мне не нравится.
И я повторю: void* - это стандартный тип указателя для
нетипизированных буферов. Посмотрите, например, на прототип библиотечной функции memcpy. И правильно, что вам надоедает писать везде sizeof, когда у вас одинаковых вызовов много. Напишите набор функций-обёрток для своих типов, но не макросы. И никогда, подчеркну,
никогда не кодируйте размер переменной явной константой, если вы, конечно, не любитель искать себе приключений.
Ну а использование ключевого слова inline вам всегда поможет успокоить нервы, если для вас критична скорость работы подобных функций-обёрток. Но и без ключевого слова inline в большинстве случаев подобный дополнительный вызов незначительно влияет на скорость. И замечу, что для сокращения
размера исполняемого кода нормальная (не inline) функция-обёртка при многократном использовании выгоднее, чем макросы.
Что касается древних компиляторов для мелочи - да, извращения могут требоваться разные, конечно. Вплоть до использования ассемблера. Это всё уже несколько выходит за границы обсуждаемой темы. И всё равно не думаю, что если у вас в прерывании не было вызова ни одной функции, то код этого прерывания был достаточно сложным, чтобы писать под это дело макросы.
-- 11.12.2018, 20:59 --Этот код может не работать?
Возможных причин неработы кода всегда существует гораздо больше, чем причин его работы.