Вот так штука. После 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 вложенных условий — наверняка можно сгруппировать и упростить.
    Re[2]: Вот так штука. После 128-ого if-else условия не обраб
    От: Анатолий Широков СССР  
    Дата: 15.09.10 08:32
    Оценка: :)))
    Здравствуйте, ForestMan, Вы писали:

    FM>Здравствуйте, Anpek, Вы писали:


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


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


    FM>Не скромный вопрос. Зачем вам понадобилось больше 128-ми if-else-if?


    Скромнее надо быть
    Re: Вот так штука. После 128-ого if-else условия не обрабаты
    От: Smooky Россия  
    Дата: 15.09.10 08:54
    Оценка:
    Полагаю, лично моё мнение, что таких немало классических случаев, когда стандарт выражает теоретическую обоснованность, но конкретная реализация всегда чем то ограничена должна быть! Т.е. можно декларировать что любой компилятор должен уметь обрабатывать файл из бесконечности строк, но мы же понимаем, что реально файл всегда будет ограничен N строк, где N будет например зависить от многих факторов: компилер, ОС, и т.д. Мне кажется это всё вполне нормально.
    Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
    Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
    КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
    Re[3]: Вот так штука. После 128-ого if-else условия не обраб
    От: blackhearted Украина  
    Дата: 15.09.10 09:46
    Оценка:
    Здравствуйте, de-guy, Вы писали:

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


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


    DG>---------------------------------------


    DG>Я бы постеснялся упоминать о таких "достижениях".

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

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

    DG>2-3-4 тысячи максимум, затем резать на подфайлы.

    DG>128 вложенных условий — наверняка можно сгруппировать и упростить.


    Модераторы потёрли прошлую дискуссию.
    Повторюсь — это сгенерированный код.
    Никто в своём уме писать файлы такого размера руками не будет.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.