|
|
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
День добрый! Подскажите в какую сторону можно подумать... Выдержки кода: 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 становится равным НУЛЮ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 16:02 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
Ну и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило? Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 16:20 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
Попробуйте заменить CString CJNKtoNalogDoc::GetIntroductionName(int Introduction) на CString CJNKtoNalogDoc::GetIntroductionName(const INTRODUCTION Introduction). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 16:23 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило? Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else. Очень может быть... Иногда из-за такой оптимизации приходится в дебаге "извращаться", чтоб увидеть "истину" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 16:25 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило? Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else. ОК Спасибо за ваше внимание. А каково может быть решение? Откл. оптимизацию? Зачем? Можно-ли воспользоваться дерективами местного применения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 16:26 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило? Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else. Ответ на вопрос: Или нарушило? да. нарушило. после выполнения описанных инструкций значение "Проблемной" переменной используется в конструкциях вида: if (itemData->m_Introduction!=newStatus) {//Этот клиент поменял причину отправки itemData->m_Value.Replace( //Важно для сортировки GetDocument()->GetIntroductionName(itemData->m_Introduction), GetDocument()->GetIntroductionName(newStatus)); к моменту использования значение уже попорчено... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 16:39 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
Георгий АндреевичНу и что же тут странного. Оптимизация кода это называется. Компилятор посчитал что переменная больше не нужна и освободил ее. Это ведь не нарушило логику работы программы? Или нарушило? Видел случаи, когда в if условие выполняется, а в дебаггере прога прыгает в ветку else. Результаты опыта. Да. Действительно оптимизация помогла. В смысле её отключение... Бормочит себе под нос: "Но это же не универсальное решение..." вопрос №2 не можете-ли подсказать литературу для более детального ознакомления принципов/подходов и прочего, что связано с оптимизацией? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 18:08 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
Слушай! Я конечно, извиняюсь, но ты не думал вот это: 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]); } По-моему, намного понятней было бы :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 15:17 |
|
||
|
с малой надеждой на ответ...
|
|||
|---|---|---|---|
|
#18+
ErVСлушай! Я конечно, извиняюсь, но ты не думал вот это: CString CJNKtoNalogDoc::GetIntroductionName(iINTRODUCTION Introduction) { char*names[] = { "Возникновение обязательств",//start "Прекращение обязательств",//end "Изменение сведений",//correction "Аннуляция сведений",//annulation "Причина НЕИЗВЕСТНА"//err } return CString(names[Introduction]); } По-моему, намного понятней было бы :). Спасибо за ответ. Но как говорит мой Товарищ: "Те же яйца, только в профиль..." :-) Сам вопрос был в неясной причине изменения значения переменной newStatus, после вызова GetIntroductionName(int Introduction), ну да шут с ним. мой личный вывод, после вчерашнего прочтения литературы таков: Нефиг лазить дебаггером в Release сборку. Всем спасибо за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 16:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33704505&tid=2031370]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 257ms |
| total: | 394ms |

| 0 / 0 |
