Невозможно построить динамический массив в dev-pascal

Я все еще новичок, поэтому, пожалуйста, простите меня, если это глупая ошибка или что-то в этом роде. Я хочу написать программу для генерации простых чисел от 2 до n, причем n определяется пользователем. Поскольку я не знаю n в начале программы, я хочу построить динамический массив и потом установить длину (n). Вот фрагмент моего кода:

    program D401;
    type
       arr = array of int64;
    var
       x : int64;
       a : arr;
    begin
        readln(x);
        setlength(a, x);
    end.

Но это не сработает и пишет: Fatal: Syntax error, [ожидается, но OF найдено

Я также пробовал это:

    program D401;
    var
       x : int64;
       a : array of int64;
    begin
        readln(x);
        setlength(a, x);
    end.

Но он также выдает ту же ошибку. Я также использовал freepascal и GNU Pascal, но он тоже не работает. Это проблема dev-pascal или он не обновляется или что-то в этом роде?

Заранее спасибо.


person Toshi    schedule 22.12.2016    source источник
comment
Ваши программы выглядят действительными. Какая версия fpc используется?   -  person MBo    schedule 22.12.2016
comment
Вы вообще используете текущую версию FreePascal? Если этот синтаксис неприемлем, вы, вероятно, используете очень старый FreePascal или какой-то другой диалект Pascal.   -  person Rudy Velthuis    schedule 22.12.2016
comment
Я мог представить, что GNU Pascal не принимает такой синтаксис. Насколько я знаю, встроенные динамические массивы есть только в Delphi и FreePascal.   -  person Rudy Velthuis    schedule 22.12.2016
comment
Я удалил тег freepascal. Вопрос касается devpascal.   -  person David Heffernan    schedule 22.12.2016
comment
@David Dev-Pascal — это просто IDE, использующая компиляторы freepascal (fpc) ​​или gpc, поэтому причина ошибки связана с компилятором.   -  person MBo    schedule 22.12.2016
comment
@MBo Здесь важен древний компилятор, так что на самом деле проблема в Dev-Pascal и его устаревании.   -  person David Heffernan    schedule 22.12.2016


Ответы (2)


Dev Pascal является древним и использует старые компиляторы, которые не поддерживают синтаксис динамического массива. Проще говоря, вы не должны использовать его сегодня.

Если вам нужна бесплатная среда разработки, использующая современный компилятор Pascal, лучшим вариантом будет Lazarus, использующий современную версию freepascal.

person David Heffernan    schedule 22.12.2016
comment
Я проверил, и действительно, похоже, он не поддерживает массивы dyn. Странно, я думал, что это уже было в 1.1.x времена. Так что лучше вернитесь к 2004 году и используйте версию из этого десятилетия. - person Marco van de Voort; 22.12.2016
comment
Спасибо, Марко. Вернуться в 2004? Однозначно лучший вариант. Кстати, с сезонным приветом! - person David Heffernan; 22.12.2016
comment
Спасибо, тебе того же :-) - person Marco van de Voort; 28.12.2016

В современном мире это не имеет значения. Но я пишу свой ответ для тех, кто хочет намеренно использовать устаревший GNU Pascal. Я немного знаю о GNU Pascal, но предлагаю подход, основанный на указателях:

program dynarr;

type
  TElem = integer;
  TPArray = ^TElem;

var
  pArray: TPArray;
  length, i: INTEGER;

begin
  length := 10;
  GetMem(pArray, length * sizeof(TElem));

  for i := 0 to length-1 do
    (pArray+i)^:=i;
  for i := 0 to length-1 do
    writeln((pArray+i)^);

  FreeMem (pArray, length * sizeof(TElem));
  readln;
end.

Компилировать с опцией --pointer-arithmetic

person PavelDev    schedule 07.03.2021