Чудеса

Никогда не думал что это вообще запустится...
procedure TForm1.FormCreate(Sender: TObject);var i:Integer;Mass:array[0..18]of Integer;begin for i :=1000  to Length(Mass)-1  do //Обратите внимание на диапазончик...  Mass[i]:=i;  end;
5 ответов

[DCC Hint] H2135 FOR or WHILE loop executes zero times - deleted


Никаких чудес. Цикл просто не выпопнится ни разу.Читайте справку:
If initialValue is equal to finalValue, statement is executed exactly once. If initialValue is greater than finalValue in a for...to statement, or less than finalValue in a for...downto statement, then statement is never executed.
Перевод:
Если начальное значение равно конечному, оператор выполнится ровно один раз. Если начальное значение больше конечного в for...to или меньше конечного в for...downto, то оператор не выполнится ни разу.
Ещё посмотрите ссылки по циклу for:http://www.delphikingdom.com/asp/answer.asp?IDAnswer=62941 http://www.delphikingdom.com/asp/answer.asp?IDAnswer=62148 http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1404


*****БелАмор, Ребята, спасибо.Теперь все понятно.


Хотел бы ещё зметить, что в Delphi, в отличие от C, вычисление количества проходов цикла for выполняется один раз перед его началом. Соответственно, если начальное и конечное значение задано константами (а в вашем примере массив - статический, поэтому Length(Mass) вычисляется на этапе компиляции, и также является константой), то ситуация, когда цикл не будет выполнен ни разу, может быть обнаружена ещё на этапе компиляции и цикл может быть просто исключён компилятором, если включена оптимизация (на что и намекал *****)...


Модератор: Название темы не отражает ее суть, или несколько вопросов в одном топе!Ознакомьтесь с правилами форума!:http://forum.vingrad.ru/index.php?showtopic=96391