Ошибка в цикле FOR

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
SAK
постоялец
Сообщения: 158
Зарегистрирован: 17.02.2006 23:45:14
Откуда: Тим
Контактная информация:

Ошибка в цикле FOR

Сообщение SAK »

Код: Выделить всё

for i:=0 to 10 do
 if <условие> then
  begin
    i:=-1;
    break
  end;

Получаю:
Error: Illegal assignment to for-loop variable "i"
Согласен на предупреждение, но никак не на ошибку!

Добавлено спустя 3 минуты 48 секунд:
Хотя в Delphi тоже ошибку выдаёт.
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

Вы предлагаете изменить синтаксис?
SAK
постоялец
Сообщения: 158
Зарегистрирован: 17.02.2006 23:45:14
Откуда: Тим
Контактная информация:

Сообщение SAK »

Да нет, я ничего не предлагаю. Я полностью согласен, что любое присвоение переменной цикла внутри цикла является ошибкой, за исключением случая когда сразу после присвоения цикл принудительно прерывается. Но это никак не относится к синтаксису языка. Просто меня возмутило, что компилятор не позволил сделать операцию не являющуюся ошибочной, вот я на него и обиделся :D
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

это истой воды ошибка, иначе цикл for пришлось бы реализовывать как while - каждый раз проверяя значение счётчика и о граничителя. Что то вроде: while i<=10 do
а for вычисляет количество итераций только один раз, что ОЧЕНЬ существенно для подобных циклов

Код: Выделить всё

for i:=0 to List.Count - 1 do
  List.Add( ... ); // List.Count изменился

в цикел с while это реализуется вот так:

Код: Выделить всё

cnt:=List.Count;
while i<cnt do ...

--------

значение счётчика цикла for изменять можно, НО только для {$mode tp}
Ответить