Си или Паскаль. Что можно и что нет.

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Лояльность Си или строгость Паскаля

Си
13
15%
Паскаль
71
85%
 
Всего голосов : 84

Re: Си или Паскаль. Что можно и что нет.

Сообщение runewalsh » 07.11.2016 09:07:37

У меня и другой пример есть, чуть менее очевидный (и менее реальный тоже, это да, но не сильно; если работает — увеличить N):
Код: Выделить всё
{$mode objfpc} {$h+}
uses
  heaptrc, SysUtils;

var
  list: array of string;

  function ListIndex(index: integer): integer;
  const
    N = 4;
  var
    i: integer;
  begin
    SetLength(list, length(list) + N);
    for i := 1 to N do
      list[High(list) - N + i] := '(ListIndex ' + IntToStr(i) + '/' + IntToStr(N) + ')';
    result := index;
  end;

var
  i: integer;

begin
  SetLength(list, 1);
  list[ListIndex(0)] := '(test)';

  for i := 0 to High(list) do
    write(list[i], ' '); // ожидается: (test) (ListIndex 1/N) (ListIndex 2/N) ... (ListIndex N/N)
  writeln;
end.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: Си или Паскаль. Что можно и что нет.

Сообщение bormant » 07.11.2016 09:18:01

Подобные штуки называются "функции с побочным эффектом", собственно эффект везде одинаков, да и рецепт стандартный -- избегать побочных эффектов, не смешивать адресацию до и после побочного эффекта.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Пред.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru