К сожалению, вы не можете сделать это в C - он не поддерживает выполнение кода во время компиляции.В лучшем случае вы могли бы написать макрос без циклов или операторов.Если переменная Checksum
сделана локальной, то вызов функции будет работать.
Однако это наименьшая из ваших проблем.Если вы обращаетесь к памяти, как это, вам, возможно, придется делать это через изменчивые квалифицированные указатели.Строго говоря, вы не можете даже сделать арифметику указателей для вещей, которые не являются массивами.Весь этот код является неопределенным поведением.
Кроме того, ~l_checksum
в uint16_t
сломается в 32-битной системе из-за неявного целочисленного продвижения.
Что вы, вероятно, должны сделать вместо этого, что-то вроде
for(uintptr_t i=START; i<END; i+=2)
{
uint16_t data = *(volatile uint16_t*)i;
...
}