powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / с малой надеждой на ответ...
10 сообщений из 10, страница 1 из 1
с малой надеждой на ответ...
    #33704505
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый!
Подскажите в какую сторону можно подумать...
Выдержки кода:
enum INTRODUCTION{

START=1 //Возникновение у физ. лица обязательств перед юр. лицом
,END //прекращение у физ. лица обязательств перед юр. лицом
,CORRECTION //изменение сведений об участнике
,ANNULATION //Аннуляция сведений и гражданине, подавшем сведения о приёме в члены кооператива
,ERR //Ошибочный статус
};

Процедура №1

void CMainView::OnIntroductionAnnulation()
{SetIntroduction(ANNULATION);}


Процедура №2 (выдержка)

//Установка причины подачи данных в налоговую
void CMainView::SetIntroduction(const INTRODUCTION newStatus)
{

{ CString strMsg;
strMsg.Format(
"Вы уверены, что следует изменить \nПричину предоставления сведений на \"%s\"?"
,GetDocument()->GetIntroductionName(newStatus)
);

if (MessageBox(strMsg,
"Внимание",
MB_ICONEXCLAMATION|MB_DEFBUTTON2|MB_YESNO)==IDNO)
{return;}
}

Процедура №3

CString CJNKtoNalogDoc::GetIntroductionName(int Introduction)
{
CString retval;
switch(Introduction)
{ case START:
{retval="Возникновение обязательств";break;}
case END:
{retval="Прекращение обязательств";break;}
case CORRECTION:
{retval="Изменение сведений";break;}
case ANNULATION:
{retval="Аннуляция сведений";break;}
default:{retval="Причина НЕИЗВЕСТНА";break;}
}
return retval;
}


Сам вопрос:
Просмотр в дебаггере слежение за переменной const INTRODUCTION newStatus

1. Вызывается функция void CMainView::OnIntroductionAnnulation()
2. Вызывается функция void CMainView::SetIntroduction(const INTRODUCTION newStatus)
при этом newStatus равна 4 т.е. ANNULATION
3. Далее выполняется строка кода (выделено красным) вызывающая GetIntroductionName(int Introduction)
4. Выполняется GetIntroductionName(int Introduction) значение Introduction равно 4.
5. Управление возвращается в void CMainView::SetIntroduction(const INTRODUCTION newStatus) и.... значение переменной newStatus становится равным 32095848

Вопрос: ЭТО КАК??? Я в ступоре сижу. Надеюсь понятно алгоритм действий описал? Выскажитесь, куда смотреть...
Нет я передалю функции, типы параметров... но всё-же... Как это ТАК???

p.s. самое забавное дальше в последующей работе функции SetIntroduction(const INTRODUCTION newStatus) после выполнения
if (GetListCtrl().GetItem(&lvItem)) совершенно не относящегося к переменной newStatus значение переменной newStatus становится равным НУЛЮ
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33704591
Ну и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило?
Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else.
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33704604
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте заменить
CString CJNKtoNalogDoc::GetIntroductionName(int Introduction)
на
CString CJNKtoNalogDoc::GetIntroductionName(const INTRODUCTION Introduction).
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33704611
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило?
Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else.

Очень может быть...
Иногда из-за такой оптимизации приходится в дебаге "извращаться", чтоб увидеть "истину" :)
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33704614
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило?
Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else.

ОК
Спасибо за ваше внимание.

А каково может быть решение? Откл. оптимизацию? Зачем?

Можно-ли воспользоваться дерективами местного применения
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33704645
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило?
Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else.

Ответ на вопрос: Или нарушило?
да. нарушило. после выполнения описанных инструкций значение "Проблемной" переменной используется в конструкциях вида:

if (itemData->m_Introduction!=newStatus)
{//Этот клиент поменял причину отправки
itemData->m_Value.Replace( //Важно для сортировки
GetDocument()->GetIntroductionName(itemData->m_Introduction),
GetDocument()->GetIntroductionName(newStatus));

к моменту использования значение уже попорчено...
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33704988
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило?
Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else.

Результаты опыта.
Да. Действительно оптимизация помогла. В смысле её отключение...
Бормочит себе под нос: "Но это же не универсальное решение..."

вопрос №2
не можете-ли подсказать литературу для более детального ознакомления принципов/подходов и прочего, что связано с оптимизацией?
Спасибо
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33707290
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай! Я конечно, извиняюсь, но ты не думал вот это:
vanoman....
enum INTRODUCTION{
START=1 //Возникновение у физ. лица обязательств перед юр. лицом
,END //прекращение у физ. лица обязательств перед юр. лицом
,CORRECTION //изменение сведений об участнике
,ANNULATION //Аннуляция сведений и гражданине, подавшем сведения о приёме в члены кооператива
,ERR //Ошибочный статус
};


CString CJNKtoNalogDoc::GetIntroductionName(int Introduction)
{
CString retval;
switch(Introduction)
{ case START:
{retval="Возникновение обязательств";break;}
case END:
{retval="Прекращение обязательств";break;}
case CORRECTION:
{retval="Изменение сведений";break;}
case ANNULATION:
{retval="Аннуляция сведений";break;}
default:{retval="Причина НЕИЗВЕСТНА";break;}
}
return retval;
}

изменить вот так, например (извиняюсь за кривое форматирование - TAB переводит фокус на другой элемент окна :))?:


enum INTRODUCTION{
START=0
,END=1
,CORRECTION=2
,ANNULATION=3
,ERR=4
};

CString CJNKtoNalogDoc::GetIntroductionName(iINTRODUCTION Introduction)
{
char*names[] = {
"Возникновение обязательств",//start
"Прекращение обязательств",//end
"Изменение сведений",//correction
"Аннуляция сведений",//annulation
"Причина НЕИЗВЕСТНА"//err
}
return CString(names[Introduction]);
}

По-моему, намного понятней было бы :).
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33707703
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErVСлушай! Я конечно, извиняюсь, но ты не думал вот это:
CString CJNKtoNalogDoc::GetIntroductionName(iINTRODUCTION Introduction)
{
char*names[] = {
"Возникновение обязательств",//start
"Прекращение обязательств",//end
"Изменение сведений",//correction
"Аннуляция сведений",//annulation
"Причина НЕИЗВЕСТНА"//err
}
return CString(names[Introduction]);
}
По-моему, намного понятней было бы :).




Спасибо за ответ.

Но как говорит мой Товарищ: "Те же яйца, только в профиль..." :-)
Сам вопрос был в неясной причине изменения значения переменной newStatus, после вызова GetIntroductionName(int Introduction),
ну да шут с ним.

мой личный вывод, после вчерашнего прочтения литературы таков:
Нефиг лазить дебаггером в Release сборку.

Всем спасибо за участие!
...
Рейтинг: 0 / 0
с малой надеждой на ответ...
    #33707730
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vanomanмой личный вывод, после вчерашнего прочтения литературы таков:
Нефиг лазить дебаггером в Release сборку.


Вывод правильный :))
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / с малой надеждой на ответ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]