iskander писал(а):Это синтаксически неправильная конструкция.
В общем-то правильная
Модератор: Модераторы
iskander писал(а):Это синтаксически неправильная конструкция.
iskander писал(а):Так открой нам эту жгучую тайну, не нужно никаких аксиом.
Лекс Айрин писал(а):Тайна проста. Условно, все ссылочные переменные не определены. Да и в for требуется перечислимый тип. (Byte, Integer, longint... и производные от них).
iskander писал(а):Так открой нам эту жгучую тайну, не нужно никаких аксиом.
Лекс Айрин писал(а):Это компилятор дает по рукам, так как не может проверить (на этапе компиляции) что находится за ссылочной переменной и существует ли она вообще.
Mikhail писал(а):iskander писал(а):Это синтаксически неправильная конструкция.
В общем-то правильная :)
Подумай, что будет с циклом for, если в указателе на переменную цикла будет nil? И локальные переменные для цикла не устраивают? Они же будут или в регистрах или в кеше процессора, а указатель может быть куда угодно, даже в paged memory, в своп.
pI^ := 0;
while pI^ <= 100 do begin ... Inc(pI^); end;
Mikhail писал(а):В общем-то правильная
Лекс Айрин писал(а):Тайна проста. Условно, все ссылочные переменные
Дож писал(а): Тут явно написано "variable identifier"
Mikhail писал(а):Там разыменован типизированный указатель на Integer
serbod писал(а):Подумай, что будет с циклом for, если в указателе на переменную цикла будет nil?
Дож писал(а):Может этот кусок кода тоже запретить на тех же основаниях?
Дож писал(а):Не можете так сделать, потому что это требование компилятора к программе (переменная-счётчик для for-to цикла должна быть локальной к текущему телу).
Не все счётчики размещаются в регистрах, какие-то будут на стеке.
iskander писал(а):Что значит условно?
iskander писал(а):После for должно быть имя переменной.
serbod писал(а):Подумай, что будет с циклом for, если в указателе на переменную цикла будет nil? И локальные переменные для цикла не устраивают? Они же будут или в регистрах или в кеше процессора, а указатель может быть куда угодно, даже в paged memory, в своп.
Лекс Айрин писал(а):Он как только видит, что есть ссылочная переменная или намек на нее, то как скандальная жена
procedure BigBang;
var
p: PInteger;
I: Integer;
begin
p := nil;
for I := 0 to 100 do
p[I] := I;
end;
olegy123 писал(а):сейчас модно не локализировать переменные, а все толкать в стэк.
Дож писал(а):А что будет с такой программой, если pI = nil?
о чем сабж..Лекс Айрин писал(а):olegy123 писал(а):сейчас модно не локализировать переменные, а все толкать в стэк.
Дело не в моде. Это просто особенности реализации компилятора. Для процессора проще использовать или особый регистр-счетчик, либо использовать переменную. И локальные переменные располагаются в стеке, так как ими там проще манипулировать.
olegy123 писал(а):В си for(;true;) будет работать..
iskander писал(а):Насчет "видит": это самообман. Когда дело доходит до указателей компилятор в основном нервно курит в сторонке.
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1