А можно с этого момента поподробнее. Как __NONAMED+weak заменить на static? если написать static const __NONAMED_##__LINE__ (line через 2 макроса, но сейчас не важно) то компилятор без -O0 попросту выкинет все это переменные (GCC 4.6, GCC 4.3). -fkeep-static-consts не действует. Другие компиляторы -- абстрактные. IAR, hitech (для 8-бит), не GCC короче говоря, и для микроконтроллеров.