Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Bug?  (Прочитано 5417 раз)
0 Пользователей и 1 Гость смотрят эту тему.
acc15
Гость
« : 01-05-2006 05:46 » 

замечено одно досадное недоразумение.
если использовать цикл for совместно с if то при первом же входе в цикл происходит проверка (if) и мгновенный вылет из цикла независимо ни от чего...

for (i=0;i<10;i++) if (i) i++; // к примеру

однако если использовать конструкцию совместно с else то всё работает без проблемм. т.е.

for (i=0;i<10;i++) if (i) i++; else ; // согласитесь немного туповато выглядит

либо добавить фигурные скобки

for (i=0;i<10;i++) { if (i) i++; }

Проверено в MS VC 6 и .NET 2003, везде тоже самое, однако в Borland тот же самый пример работает по иному, т.е. так как надо. У Microsoft'а баг даже в компиляторе? Или это так было задумано? =)
« Последнее редактирование: 15-12-2007 17:00 от Алексей1153++ » Записан
Alf
Гость
« Ответ #1 : 01-05-2006 06:59 » 

Попробовал то же самое в Studio 6.0 и 2003, на версиях исполняемого файла Debug и Release. Прошел цикл в пошаговом режиме. Во всех случаях получил правильный результат.

Мне не удалось воспроизвести ошибку.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #2 : 01-05-2006 10:03 » 

acc15, всё работает, тебя , наверное, смутило вот что:
Код:
int iii;

int i;
for (i=0;i<10;i++)
if (i)
i++;

iii++;

если под дебагом смотреть, то указатель команд после каждого цикла попадает на строку iii++; , однако на не выполняется. После этого - переход в начало цикла
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #3 : 01-05-2006 10:04 » 

1372:     for (i=0;i<10;i++)
0040974C   mov         dword ptr [ebp-0Ch],0
00409753   jmp         CReversiGrid1153::OnDestroy+4Eh (0040975e)
00409755   mov         ecx,dword ptr [ebp-0Ch]
00409758   add         ecx,1
0040975B   mov         dword ptr [ebp-0Ch],ecx
0040975E   cmp         dword ptr [ebp-0Ch],0Ah
00409762   jge         CReversiGrid1153::OnDestroy+65h (00409775)
1373:         if (i)
00409764   cmp         dword ptr [ebp-0Ch],0
00409768   je          CReversiGrid1153::OnDestroy+63h (00409773)
1374:             i++;
0040976A   mov         edx,dword ptr [ebp-0Ch]
0040976D   add         edx,1
00409770   mov         dword ptr [ebp-0Ch],edx
1375:
1376:     iii++;
00409773   jmp         CReversiGrid1153::OnDestroy+45h (00409755)
00409775   mov         eax,dword ptr [ebp-8]
00409778   add         eax,1

0040977B   mov         dword ptr [ebp-8],eax
1377:
1378:
1379: }
0040977E   pop         edi
« Последнее редактирование: 01-05-2006 10:06 от Алексей1153 » Записан

acc15
Гость
« Ответ #4 : 01-05-2006 10:51 » new

Цитата
если под дебагом смотреть, то указатель команд после каждого цикла попадает на строку iii++; , однако на не выполняется. После этого - переход в начало цикла
мда... Алексей прав... нехватило мне серого вещества ещё раз на кнопку нажать. =). Однако логика билла поражает.
« Последнее редактирование: 01-05-2006 10:53 от acc15 » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines