Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
Это не вопрос. Это просто на заметку
14.09.10 18:47: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Вот так штука. После 128-ого if-else условия не обрабаты
Здравствуйте, Anpek, Вы писали:
A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
A>Это не вопрос. Это просто на заметку
Полиморфизм чтоли?
Re: Вот так штука. После 128-ого if-else условия не обрабаты
Здравствуйте, Anpek, Вы писали:
A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
A>Это не вопрос. Это просто на заметку
Занятно.
Ради интереса поглядел в ISO C++ Appendix B Implementation quantities. Там такого нет, т.е. они считают, что реализация должна обрабатывать любое кол-во else-if'ов.
Здравствуйте, superlexx, Вы писали:
S>на VS2008 показывает, на VS2005 также должно быть
Не, не показал че-то. Убились мы пока эту ошибку нашли. Уж на кого в последнюю очередь подумашь, так это на компилятор. Скорее себя 100 раз дураком обзовешь.
Re[2]: Вот так штука. После 128-ого if-else условия не обраб
Здравствуйте, remark, Вы писали:
R>Здравствуйте, Anpek, Вы писали:
A>>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
A>>Это не вопрос. Это просто на заметку
R>Занятно. R>Ради интереса поглядел в ISO C++ Appendix B Implementation quantities. Там такого нет, т.е. они считают, что реализация должна обрабатывать любое кол-во else-if'ов.
Nesting levels of ... and selection control structures — разве не оно?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: Вот так штука. После 128-ого if-else условия не обраб
Здравствуйте, Anpek, Вы писали:
S>>на VS2008 показывает, на VS2005 также должно быть A>Не, не показал че-то. Убились мы пока эту ошибку нашли. Уж на кого в последнюю очередь подумашь, так это на компилятор. Скорее себя 100 раз дураком обзовешь.
И на VC2005 показал.
Сервиспак стоит? (у меня — да)
Перекуём баги на фичи!
Re[4]: Вот так штука. После 128-ого if-else условия не обраб
Здравствуйте, Anpek, Вы писали:
A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
A>Это не вопрос. Это просто на заметку
Позволю себе цитату.
Hey! I hate these Microsoft guys! What a rotten compiler! It only accepts 16384 local variables in a function!
И еще из опыта — дебаггер в студиях до 2005 включительно не работает с файлами больше, чем из 65535 строк.
Это не вопрос. Просто на заметку.
Re: Вот так штука. После 128-ого if-else условия не обрабаты
Здравствуйте, Anpek, Вы писали:
A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
A>Это не вопрос. Это просто на заметку
Тот кто сидит в пруду:
R>>Ради интереса поглядел в ISO C++ Appendix B Implementation quantities. Там такого нет, т.е. они считают, что реализация должна обрабатывать любое кол-во else-if'ов.
ТКС>Nesting levels of ... and selection control structures — разве не оно?
Оно. Однако в Appendix B описываются лишь рекомендуемые (но не нормативные) лимиты. Перечень несоблюдаемых VC++ 8.0 лимитов есть в MSDN.
Re[2]: Вот так штука. После 128-ого if-else условия не обраб
Здравствуйте, blackhearted, Вы писали:
B>И еще из опыта — дебаггер в студиях до 2005 включительно не работает с файлами больше, чем из 65535 строк. B>Это не вопрос. Просто на заметку.
блин
вот почему файл sqlite.c (119 тыс. строк, 4 Mb) фигово дебажится у меня! ну елы палы, Семен Семеныч! http://www.sqlite.org/sqlite-amalgamation-3_7_2.zip
Re[2]: Вот так штука. После 128-ого if-else условия не обраб
Здравствуйте, _nn_, Вы писали: __>Кстати, из драфта C++0x: __> Case labels for a switch statement (excluding those for any nested switch statements) [16 384].
Надеюсь, к меткам goto это ограничение не относится
лэт ми спик фром май харт
Re: Вот так штука. После 128-ого if-else условия не обрабаты
Здравствуйте, Anpek, Вы писали:
A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
Дай угадаю, автогенерируемый код какого-нибудь конечного автомата? Если так, то лучше для этого использовать всеми ненавидимый goto, но для автогенерируемого кода, оно самое-то.
Re: Вот так штука. После 128-ого if-else условия не обрабаты
Здравствуйте, Anpek, Вы писали:
A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
A>Это не вопрос. Это просто на заметку
Придется переходить на goto
--
Справедливость выше закона. А человечность выше справедливости.
Re: Вот так штука. После 128-ого if-else условия не обрабаты
Здравствуйте, Anpek, Вы писали:
A>Пришлось переделать в switch-case
Ещё можно иметь какую-нибудь таблицу из условий в указатели на обработчики. У вас какого вида условия в if'ах?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Вот так штука. После 128-ого if-else условия не обрабаты
Здравствуйте, Anpek, Вы писали:
A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
A>Это не вопрос. Это просто на заметку
Не скромный вопрос. Зачем вам понадобилось больше 128-ми if-else-if?
Re[2]: Вот так штука. После 128-ого if-else условия не обраб
>>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case
>>И еще из опыта — дебаггер в студиях до 2005 включительно не работает с файлами больше, чем из 65535 строк.
---------------------------------------
Я бы постеснялся упоминать о таких "достижениях".
Переделайте ваш код, разделите на классы, методы, уберите повторяющийся код, сделайте рефакторинг.
Из опыта — в файлах под 10 тысяч строк я просто не ориентируюсь. Без Ctrl+F там делать нечего.
2-3-4 тысячи максимум, затем резать на подфайлы.
128 вложенных условий — наверняка можно сгруппировать и упростить.