| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Не присваивается значение переменной в catch |
| Автор: Anikmar 25.9.2009, 20:02 | ||||||
| Интересный глюк у меня (или у компилятора?) Код в DLL. Вариант кода №1
Если ловим исключение - на выходе Ret==true. Вопрос почему? Пробовал отключать оптимизацию, переключать debug/release никакого эффекта. Видоизменяю код:
Теперь все нормально. Можно видоизменить так:
Тоже все в порядке. Собственно вопрос в чем: таких конструкций еще некоторое количество. Во всех такие финты на всякий случай встраивать или кто-то уже с таким глюком сталкивался? как я понял, если в переменной Ret что-нибудь перед выходом сделать (допустим типа if (Ret) .... какое-нибудь ненужное дествие) - тогда все работает. Если между catch блоком и return ничего нет - то Ret==true стабильно вне зависимости от возникновения исключения. Откуда он это значение берет? |
| Автор: 586 25.9.2009, 22:01 | ||
А если так объявить переменную:
|
| Автор: Anikmar 25.9.2009, 22:15 |
Без разницы. Работает правильно в двух случаях: Либо когда значение присваивается и в блоке try и в блоке catch Либо если перед return с этой переменной что-то сделать (проверить ее значение, переприсвоить). Причем эффект возникает только когда собирается в dll. Если этот участок кода запустить обычным способом - все нормально. |