Цитата(GDI @ May 23 2008, 14:11)

Я лишь предлагаю быстрое и гарантированное решение конкретной проблемы. При вложенных вызовах функций ИАР действительно может перезаписать локальные переменные которые он разместил в регистрах, но я не склонен с ходу объявлять такое поведение глюками компилятора,
Решение проблемы - это поиск и устранение ее причины. Вы же предлагаете некий обход проблемы, который может помочь, а может вылезти боком или здесь или дальше - если все переменные делать глобальными, то память кончится очень быстро и начнутся проблемы налезания стека на данные. Если компилятор действительно портит локальные переменные (а это пока не доказано) - то это явный глюк компилятора, но пока не доказан сам факт порчи. Если факт будет доказан - то более удачное решение - взять адрес переменной. Это заставит компилятор разместить ее на стеке и переменная не будет занимать место после завершения функции. Но опять же - компиляторы нынче ух какие умные, могут соптимизировать и это

Цитата(GDI @ May 23 2008, 14:11)

конечно же здесь имеет место недопонимание между программистом и компилятором. Можно и нужно искать причины этого недопонимания, но иногда надо сперва получить результат - конкуренты не дремлют и начальство не спит.

С некоторой натяжкой можно согласиться. Причем недопонимание в подавляющем большинстве случаев со стороны программиста. И опять же, такое быстрое решение обязательно вылезет потом. Ведь никто не будет возвращаться к этому месту пока не навернется что-то еще. "Работает - не трогай". И значит бездумное использование такого обходного маневра будет продолжаться и дальше, где надо и чаще - где не надо. А когда вдруг перестанет работать - на поиск причины уйдет мама дорогая сколько времени. И когда будет найдена настоящая причина - часть "обходов" будет убрана, а часть так и останется забытой, ожидая времени, когда приподнести очередной сюрприз.