![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
И что делать с этим raised CONSTRAINT_ERROR : test.adb:24 discriminant check failed ? В процедуре через out-параметр присвоилось нормально, однако. А вот t3'access.all := t1'access.all; - ошибка дискриминанта Почему прямо присваивать можно, а через указатель - нельзя? Так и написано в стандарте? Если поставить точку останова, а потом добить пустых строчек так, чтобы эта точка оказалась на строчке, на которой ничего нет, а потом отрубить отладчик, пересобрать код, перезапустить отладчик, то эту точку останова уже не убрать. Дизассмеблер не взлетел: Couldn't get assembly code. Кстати, смысла на ограничения параметров в функциях нет никакого. Избавление от побочных эффектов? Ха, толку, если можно писать во внешние переменные. Зато костыль с access получится на славу по уродливости. Зачем вообще языки Паскалевого семейства делают ненужное разделение на процедуры и функции? Да, концепция красивая, типа процедура - то, что выполняется, функция - то, что возвращает значение, но в условиях реальности она только мешает. Сообщение отредактировано: TarasBer - 31.01.2011 15:11 -------------------- |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата для записей с дискриминантом по умолчанию, как написано, в стандарте, память всегда выделяется под самую длинную ветку. В Стандарте? Где именно, можно уточнить? Ибо это не выполняется ни разу. Проверь, чему равен t1'Size, а чему - t2'Size (где t1 имеет дискриминант = 0, а t2 - дискриминант = 1). А ведь использование этого поля не ограничивается обычным селектором. Я ж могу и так сделать:type Vector is array(Positive range <>) of Integer; , и это тоже дискриминантная запись. Какой теперь будет размер у tmain(0)? Неужели такой же, как и у tmain(48)? У меня что-то не получилось (я под Debian-ом сейчас, попробуй под Виндой, на всякий случай. Хотя я очень сомневаюсь). Показывает при d = 0: Size = 64 бита, а при d = 48: Size = 1632 бита. Где ж наибольшая длина? И какая она, кстати? Если в ветке when others описать еще один массив, тоже зависящий от D, то максимальный размер может быть совместим с общим объемом памяти в системе. Однако при корректной работе с такими записями все будет нормально. Правда предупреждение тебе компилятор-таки даст, мол Storage_Error может приключиться, если слишком большой дискриминант будет. Цитата Кстати, а будет ли добавлена конструкция return when, по аналогии с exit when? Что-то я не помню такого предложения на 2012. Хотя раньше - помню. Было в драфте того же документе, Ada 9X Project Report, под кодом Reference RR-0614: "Allow WHEN/RETURN in functions similar to EXIT/WHEN in loops." В итоговой версии документа этого предложения уже нет, не вышло оно из драфта. Причины непонятны. |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 8:02 |