-
- Штука очень мощная и столь же опасная, особенно в эмбеднутых задачах. Конкретно в вашем примере совершенно непонятно, каков реально будет размер массива. В зависимости от версии/опций компилятора это может быть и var, и 1, и 8. - LightElf(28.01.2016 11:12)
- Расскажите поподробней о мощах этой "штуки". - =L.A.=(29.01.2016 11:21)
- Мощь - в удобстве: автоматическое освобождение при выходе из функции, thread-safety и все такое. Минус в полном отсутствии обработки ошибочных ситуаций и очень большой зависимости от реализации в компиляторе. В конкретном примере для определения LightElf(552 знак., 29.01.2016 12:24)
- Тебе нужен массив памяти неизвестной заранее длины... Очевидно же. Ты конечно можешь сразу выделить максимальной длины. Но алгоритм может быть рекурсивным --> и с таким подходом рекурсия быстро упрётся в конец стека. Причём рекурсия может быть не fk0(995 знак., 29.01.2016 11:56 - 12:01)
- Согласен. Сильно и опасно. Надо юзать очень аккуратно. Приведенный код - просто пример. Увидел в исходнике для PICа - там таким макаром картинки загружаемые из флеша обрабатываются. - Unreal_2004(28.01.2016 11:23)
- Расскажите поподробней о мощах этой "штуки". - =L.A.=(29.01.2016 11:21)
- эта фича называется "массивы переменной длины" (variable-length arrays) появилась в стандарте с99, посмотри в настройках компилятора крыжик VLA, может он выключен. В йаре по умолчанию выключен. Nikolay801_(24 знак., 28.01.2016 10:42, ссылка)
- Спасибо за ликбез. Ссылка полезная. - Unreal_2004(28.01.2016 11:08)
- Да. Действительно - с фишкой C99 - компилится, без фишки - выдает ошибку. - Unreal_2004(28.01.2016 11:00)
- Спасибо. Умные люди мне подсказали, что в GNU эта фича была давно как расширение, а сейчас действительно введена в стандарт. Не уверен насчет C99,но с C11 вроде точно (проверю - скажу). Век живи - век учись :-) - Unreal_2004(28.01.2016 10:55)
- "массив" по-любому получается из одного байта. - =L.A.=(28.01.2016 10:31)
- Вы не поняли. Фишка в том, что размер массива объявлен внешней глобальной переменной. - Unreal_2004(28.01.2016 10:34)
- а если в билдере добавить const перед int var? Будет ругаться? - Argon(28.01.2016 10:27)
- Все равно ошибка "Constant expression required" - что с моей точки совершенно верно. У меня просто слом шаблонов. Unreal_2004(186 знак., 28.01.2016 10:29)
- не нужно так писать. - Nikolay801_(28.01.2016 10:34)
- ИМХО. Для микроконтроллеров это зло. Заранее заложенные грабли, которые будет очень сложно отловить. - Unreal_2004(28.01.2016 10:57)
- И goto зло, и printf зло, и float зло, и ещё 100500 зол есть. Пиши на ассемблере. А то куда ни плюнь, везде грабли. И malloc зло. И int переменной длины тоже зло. И char (без)знаковый тоже зло. И исключения зло, тем более longjmp страшное зло. И fk0(173 знак., 28.01.2016 11:01)
- есть красивые ходы без malloc - например уложить в union "квази-статические" переменные для разных групп функций для поочередного использования ОЗУ. До сих пор проект живет. - VL(01.02.2016 11:28, )
- В общем знание сила. Буду знать. - Unreal_2004(28.01.2016 11:06)
- И goto зло, и printf зло, и float зло, и ещё 100500 зол есть. Пиши на ассемблере. А то куда ни плюнь, везде грабли. И malloc зло. И int переменной длины тоже зло. И char (без)знаковый тоже зло. И исключения зло, тем более longjmp страшное зло. И fk0(173 знак., 28.01.2016 11:01)
- Кому не нужно и почему? - fk0(28.01.2016 10:56)
- Слушай, ты в каждой бочке затычка и каждый раз где ты - там флейм. Уже не первый раз. Не мог бы ты писать по теме а не развивать флейм? Не знаешь - лучше промолчи. - Unreal_2004(28.01.2016 11:07)
- Не знаешь и задаёшь глупые вопросы -- ты, заметь. Я же пытаюсь возражать против очевидных глупостей. - fk0(28.01.2016 11:10)
- Всем спасибо. Тема закрыта. Я тебя в личке отдельно поблагодарил. - Unreal_2004(28.01.2016 11:20)
- Не знаешь и задаёшь глупые вопросы -- ты, заметь. Я же пытаюсь возражать против очевидных глупостей. - fk0(28.01.2016 11:10)
- Слушай, ты в каждой бочке затычка и каждый раз где ты - там флейм. Уже не первый раз. Не мог бы ты писать по теме а не развивать флейм? Не знаешь - лучше промолчи. - Unreal_2004(28.01.2016 11:07)
- ИМХО. Для микроконтроллеров это зло. Заранее заложенные грабли, которые будет очень сложно отловить. - Unreal_2004(28.01.2016 10:57)
- не нужно так писать. - Nikolay801_(28.01.2016 10:34)
- Все равно ошибка "Constant expression required" - что с моей точки совершенно верно. У меня просто слом шаблонов. Unreal_2004(186 знак., 28.01.2016 10:29)
- Штука очень мощная и столь же опасная, особенно в эмбеднутых задачах. Конкретно в вашем примере совершенно непонятно, каков реально будет размер массива. В зависимости от версии/опций компилятора это может быть и var, и 1, и 8. - LightElf(28.01.2016 11:12)