Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Ну т.е. был много лет такой тупой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Время от времени линейно добавлял туда новые "ID". Счас добавил пару десятков, при компиляции выдал: Код: plaintext 1. Причина в принципе понятна: превышен лимит "вложенности". Как правильно переписать? Вариант 1: вообще убрать else if? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вариант 2: разбить на 2 блока, ну м.б. лет еще через 5 придется добавить 3-й. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Или пофиг? За эстетикой не гонюсь, тормозов в любом варианте при 100-200 проверок в C++ ждать неоткуда, а вот логическая ошибка критична. Смысл, жестко звпретить запуск проги на компьютерах с заданными ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 14:15 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Вариант 3 Код: plaintext 1. 2. 3. 4. 5. В принципе вариант 1 тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 14:32 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Dima T, тогда наверно вариант 1, мне комментарии желательны, хотя в C/С++ вроде можно их писать между кодом в конце каждой физической строчки. Т.е. else if категорически убрать, так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 14:41 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Может поискать функцию которая даёт TRUE для набора строк. И минимизировать ее. Хорошо проканает если быть уверенным что sys_ID имеет фиксированную разрядность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 14:43 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Дмитрий77тогда наверно вариант 1, мне комментарии желательны, хотя в C/С++ вроде можно их писать между кодом в конце каждой физической строчки. Т.е. else if категорически убрать, так? else if тут вообще не нужен. Комментарии вроде можно, проверить элементарно. Вариант 1 из текущего быстрее всего сделать: автозаменой "else if" на "if" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 14:47 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Dima TВариант 1 из текущего быстрее всего сделать: автозаменой "else if" на "if" Угу. Так и сделал, чего мудрить то. Thanks. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:07 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
std::set/unordered_set и .count(sys_ID)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:17 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Dima T, Код: plaintext 1. 2. 3. 4. 5. 6. а это зачем? просто ретурна не достаточно, думаешь? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:39 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
Я думаю что if-else тоже имел-бы смысл если гистограмма входных значений sys_ID была-бы близка к линейной. В этом случае мы могли-бы организовать нечто вроде дихотомического поиска строк (насколько позволит вложенность if-else для компиллера). А так код с Guard-expressions который "заворачивает" true наверх вполне себе эффективен когда одни ключи очень частые а другие (пониже в коде) относительно реже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:54 |
|
||
|
fatal error C1061: compiler limit : blocks nested too deeply
|
|||
|---|---|---|---|
|
#18+
egorychDima T, Код: plaintext 1. 2. 3. а это зачем? просто ретурна не достаточно, думаешь? ;) Не глубокий знаток С. Кто-то мне писал что логическими типами в С не все гладко, return <условие> имеет какие-то подводные камни и лучше дополнительно привести к TRUE/FALSE, поверил на слово, хуже точно не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:58 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=44&tid=2018863]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 323ms |
| total: | 497ms |

| 0 / 0 |
