Вот так штука. После 128-ого if-else условия не обрабатывают
От: Anpek  
Дата: 14.09.10 14:02
Оценка: 112 (13) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :)
Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case

Это не вопрос. Это просто на заметку

14.09.10 18:47: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Вот так штука. После 128-ого if-else условия не обрабаты
От: andyag  
Дата: 14.09.10 14:03
Оценка:
Здравствуйте, Anpek, Вы писали:

A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case


A>Это не вопрос. Это просто на заметку

Полиморфизм чтоли?
Re: Вот так штука. После 128-ого if-else условия не обрабаты
От: remark Россия http://www.1024cores.net/
Дата: 14.09.10 14:06
Оценка:
Здравствуйте, Anpek, Вы писали:

A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case


A>Это не вопрос. Это просто на заметку


Занятно.
Ради интереса поглядел в ISO C++ Appendix B Implementation quantities. Там такого нет, т.е. они считают, что реализация должна обрабатывать любое кол-во else-if'ов.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Вот так штука. После 128-ого if-else условия не обрабаты
От: superlexx  
Дата: 14.09.10 14:23
Оценка: 4 (1)
http://msdn.microsoft.com/en-us/library/dcda4f64(v=VS.80).aspx

на VS2008 показывает, на VS2005 также должно быть
c1061
Re[2]: Вот так штука. После 128-ого if-else условия не обраб
От: Anpek  
Дата: 14.09.10 14:25
Оценка:
Здравствуйте, superlexx, Вы писали:

S>на VS2008 показывает, на VS2005 также должно быть


Не, не показал че-то. Убились мы пока эту ошибку нашли. Уж на кого в последнюю очередь подумашь, так это на компилятор. Скорее себя 100 раз дураком обзовешь.
Re[2]: Вот так штука. После 128-ого if-else условия не обраб
От: Тот кто сидит в пруду Россия  
Дата: 14.09.10 14:28
Оценка:
Здравствуйте, 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 условия не обраб
От: Кодт Россия  
Дата: 14.09.10 14:47
Оценка:
Здравствуйте, Anpek, Вы писали:

S>>на VS2008 показывает, на VS2005 также должно быть

A>Не, не показал че-то. Убились мы пока эту ошибку нашли. Уж на кого в последнюю очередь подумашь, так это на компилятор. Скорее себя 100 раз дураком обзовешь.

И на VC2005 показал.
Сервиспак стоит? (у меня — да)
Перекуём баги на фичи!
Re[4]: Вот так штука. После 128-ого if-else условия не обраб
От: Anpek  
Дата: 14.09.10 14:50
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Сервиспак стоит? (у меня — да)


Да, есть. Хммм.. Странно. Ну значит фаза луны не подходящая была
Re: Вот так штука. После 128-ого if-else условия не обрабаты
От: blackhearted Украина  
Дата: 14.09.10 14:53
Оценка: 5 (2) :)
Здравствуйте, 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 условия не обрабаты
От: _nn_ www.nemerleweb.com
Дата: 14.09.10 14:59
Оценка: +1 :)))
Здравствуйте, Anpek, Вы писали:

A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case


A>Это не вопрос. Это просто на заметку


Вообще должна быть ошибка: C1061

Кстати, из драфта C++0x:

  • Nesting levels of conditional inclusion [256]
  • Case labels for a switch statement (excluding those for any nested switch statements) [16 384].

    Осторожней, скоро switch-а не хватит
  • http://rsdn.nemerleweb.com
    http://nemerleweb.com
    Re[2]: Вот так штука. После 128-ого if-else условия не обраб
    От: Torie  
    Дата: 14.09.10 15:17
    Оценка: :))) :))
    Здравствуйте, _nn_, Вы писали:

    __> Осторожней, скоро switch-а не хватит


    Сделать switch на первые 16 384 значений, а внутри default еще один свитч. И так далее.
    Re[3]: Вот так штука. После 128-ого if-else условия не обраб
    От: Masterkent  
    Дата: 14.09.10 15:17
    Оценка: 4 (1)
    Тот кто сидит в пруду:

    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 условия не обраб
    От: uzhas Ниоткуда  
    Дата: 14.09.10 19:19
    Оценка: :)
    Здравствуйте, 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 условия не обраб
    От: mrTwister Россия  
    Дата: 14.09.10 20:57
    Оценка: :)
    Здравствуйте, _nn_, Вы писали:
    __>Кстати, из драфта C++0x:
    __>
  • Case labels for a switch statement (excluding those for any nested switch statements) [16 384].

    Надеюсь, к меткам goto это ограничение не относится
  • лэт ми спик фром май харт
    Re: Вот так штука. После 128-ого if-else условия не обрабаты
    От: villeson  
    Дата: 15.09.10 02:49
    Оценка:
    Здравствуйте, Anpek, Вы писали:

    A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case


    Дай угадаю, автогенерируемый код какого-нибудь конечного автомата? Если так, то лучше для этого использовать всеми ненавидимый goto, но для автогенерируемого кода, оно самое-то.
    Re: Вот так штука. После 128-ого if-else условия не обрабаты
    От: rg45 СССР  
    Дата: 15.09.10 04:00
    Оценка: +1
    Здравствуйте, Anpek, Вы писали:

    A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case


    A>Это не вопрос. Это просто на заметку


    Придется переходить на goto
    --
    Не можешь достичь желаемого — пожелай достигнутого.
    Re: Вот так штука. После 128-ого if-else условия не обрабаты
    От: Erop Россия  
    Дата: 15.09.10 04:06
    Оценка:
    Здравствуйте, Anpek, Вы писали:

    A>Пришлось переделать в switch-case

    Ещё можно иметь какую-нибудь таблицу из условий в указатели на обработчики. У вас какого вида условия в if'ах?
    Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
    Re: Вот так штука. После 128-ого if-else условия не обрабаты
    От: k55 Ниоткуда  
    Дата: 15.09.10 06:27
    Оценка: :)
    Кто это сделал?
    Если есть желание — найдется 1000 возможностей.
    Если нет желания — найдется 1000 причин.
    Re: Вот так штука. После 128-ого if-else условия не обрабаты
    От: ForestMan Украина  
    Дата: 15.09.10 08:08
    Оценка:
    Здравствуйте, Anpek, Вы писали:

    A>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case


    A>Это не вопрос. Это просто на заметку


    Не скромный вопрос. Зачем вам понадобилось больше 128-ми if-else-if?
    Re[2]: Вот так штука. После 128-ого if-else условия не обраб
    От: de-guy Германия  
    Дата: 15.09.10 08:16
    Оценка: +1 -1
    >>Код расширялся постепенно-постепенно, количество if-else-if увеличивалось. И вот наткнулись на багу VS2005 — после 128-го вложенного if-else-if условия просто напросто игнорируются. Пришлось переделать в switch-case

    >>И еще из опыта — дебаггер в студиях до 2005 включительно не работает с файлами больше, чем из 65535 строк.


    ---------------------------------------

    Я бы постеснялся упоминать о таких "достижениях".
    Переделайте ваш код, разделите на классы, методы, уберите повторяющийся код, сделайте рефакторинг.

    Из опыта — в файлах под 10 тысяч строк я просто не ориентируюсь. Без Ctrl+F там делать нечего.
    2-3-4 тысячи максимум, затем резать на подфайлы.

    128 вложенных условий — наверняка можно сгруппировать и упростить.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.