Перейти к содержанию
    

Неконстантный размер локальных массивов - можно ли?

1 hour ago, Axel said:

Абстракция от технических проблем - важное условие нахождения правильных решений ....

... и заодно проблем, вылезающих в изделиях далеко не сразу и где-нибудь в глуши, массово, хаотично и не предсказуемо. Из-за излишней самонадеянности прогеров или слишком высокого доверия к ним руководства :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, Forger said:

Из-за излишней самонадеянности прогеров или слишком высокого доверия к ним руководства :)

??? Не поведусь, извините...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Axel said:

??? Не поведусь, извините...

А мне все равно, не мне потом расхлебывать последствия динамический массивов в стеке под МК :dance2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, Darth Vader сказал:

Позволяют ли такое стандарты С/С++ и какие именно?

Даже если и позволяют, это все равно, что минировать дорогу с закрытыми глазами :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, Axel сказал:

Когда надо иногда два "больших" массива, иногда три "маленьких" . Мне от алгоритмистов такие заморочки иногда прилетали...

Откройте для себя удивительный мир union {}  :wink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, jcxz said:

Откройте для себя удивительный мир union {}  :wink:

Я вообще-то никого не уговариваю этим пользоваться, и сам избегаю, но "если звезды зажигают - значит - это кому-нибудь нужно?" (CR)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, Axel said:

сам избегаю

А не проще ли сразу выкинуть это из головы? Тогда избегать ничего не придется :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про небезопасность я понимаю. Сейчас вопрос именно в стандартах: какие поддерживают, какие нет.

По-наследству достался код в котором это используется весьма часто. Код рабочий. Компилируется GCC. А вот компилятор ARM на это ругается, выдает ошибку: неконстантный размер массива. Отсюда и возник вопрос: когда и каким стандартом это было разрешено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, Grizzly said:

Начиная с C99.

Тогда весьма странно, что компилятор ARM на это ругается. В настройках проекта в Keil MDK-ARM выбрано С99 mode. Он поекрасно понимает другие "фишки" С99: однострочные комментарии, объявление счетчиков цикла непосредственно в цикле for.

Я предполагал, что неконстантный размер массивов узаконили в С11...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неконстантный размер может быт только в массивах с автоматическим классом памяти.

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Darth Vader сказал:

Тогда весьма странно, что компилятор ARM на это ругается. В настройках проекта в Keil MDK-ARM выбрано С99 mode. Он поекрасно понимает другие "фишки" С99: однострочные комментарии, объявление счетчиков цикла непосредственно в цикле for.

Я предполагал, что неконстантный размер массивов узаконили в С11...

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/BCFGJJHF.html

Не странно, читайте документацию.

И чем Вас не устраивает alloca?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Darth Vader сказал:

В настройках проекта в Keil MDK-ARM выбрано С99 mode.

В C99 должно быть разрешено использование VLA без каких-либо дополнительных ключей компиляции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, GenaSPB said:

Неконстантный размер может быт только в массивах с автоматическим классом памяти.

Именно так это и есть. Там объявляются локальные массивы внутри функций, размеры которых вычисляются в этих же функциях ранее. Или передаются им в качестве параметров при вызове функции.

Вот ещё нашлось. Вцелом, повторяет информацию с сайта ARM. Но добавлено ещё примечание, что память под такие массивы выделяется в куче.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...