Цитата(GetSmart @ Sep 3 2011, 09:48)

В рунтайме любые операции работают. На этапе компиляции ограниченное кол-во.
Какие операции "не работают" на этапе компиляции в примере ТС ? Я понимаю, что значение адреса переменной на этапе компиляции неизвестно, будет определено позже линковщиком, а в примере ТС значение этого адреса на что-то там умножается... В общем, я бы с Вами согласился, о том, что не все операции "работают" при компиляции, но (!) давайте упростим пример ТС до такого
Код
u32 * b = (u32 *)( (u32)(&a) );
Что мы видим? Компилятор считает это неконстантным выражением. Пробуем найти: какая часть этого выражения - "не константа" с точки зрения компилятора?
Код
u32 c = (u32)(&a);
Здесь всё нормально. Выходит, что преобразование u32 в указатель делает выражение неконстантным? Пробуем:
Код
u32 * d= (u32 *)( 0x200UL );
Тоже - всё нормально. Так почему же не "работает" u32 * b = (u32 *)( (u32)(&a) ) ? Кто может объяснить?
P.S. А, таким образом извращатся с адресами я бы ТС не рекомендавал - нужно искать друкое решение Вашей залачи.