Тогда возвращаю. А GoTo теперь вот такое
Code:
!?FU255;
!!VRy1:S100;
!!la0:; [label 0]
!!if&y1>0:;
(...)
!!VRy1:-1;
!!go0:; [goto label 0]
!!en:;
[edit] Все, теперь y-1...y-100, e-1..e-100 снова зануляются. А y1..y100 и e1..e100 в любом случае занулялись при вызове.
А не будет циклов без вызова функции?
Собственно, конструкция типа
Code:
!!la0:;
........
!!if&y16<>0:;
!!go0:;
!!el:;
!!en:;
и есть готовый do-while. Впрочем, я подозреваю, что её можно сократить до !!la0:; .... !!go0&y16<>0:; ?
(13.09.2010 01:22)etoprostoya Wrote: [ -> ]в большинство серьёзных модов и карт-модов уже не возможно будет поиграть, так как там часто используются переменные, которые изначально предполагаются равными нулю.
Нормальные программисты не станут использовать неинициализированную переменную хотя бы чтобы просто перестраховаться на всякий случай.
Quote:Собственно, конструкция типа...
Это я понимаю, я имею ввиду "высокоуровневый" цикл без функции.
Высокоуровневого нет.
(16.09.2010 01:02)feanor Wrote: [ -> ]Впрочем, я подозреваю, что её можно сократить до !!la0:; .... !!go0&y16<>0:; ?
да
(16.09.2010 02:11)hippocamus Wrote: [ -> ]Нормальные программисты не станут использовать неинициализированную переменную хотя бы чтобы просто перестраховаться на всякий случай.
Если про инициализацию нулями четко оговорено в справке, то будут. Тут я сомниваюсь, что про обнуление этих переменных есть в справке. Во всяком случае, точно без подробностей.
Quote:Если про инициализацию нулями четко оговорено в справке, то будут. Тут я сомниваюсь, что про обнуление этих переменных есть в справке. Во всяком случае, точно без подробностей.
Есть. Я всегда полагался на это. Это как в Делфи вдруг окажется, что GetMem не забивает память нулями, а глобальные переменные изначально набиты мусором.
(16.09.2010 17:44)etoprostoya Wrote: [ -> ]ERM-Help Wrote:Инициализация переменных
Ага, на видном месте нет. Но может где-нибудь поглубже запрятано упомянание про локальные переменные...
А тонкости такие:
- В функции локальные переменные инициализируются нулями 1 раз - при вызове. В !!DO - тоже 1 раз перед циклом.
Code:
!?FU1;
!!IF:M^y1 = 0, если до этого не исполнялось обработчиков !?FU1 (в том числе, в других скриптах, или в предыдущих итерациях цикла !!DO)^;
!!VRy1:S5;
!?FU1;
!!IF:M^y1 = 5^;
Еще:
Code:
!?FU1;
!!VRy1:+1;
!!VRv1:Sy1;
!!DO1/1/100/1:P;
!!IF:M^v1 = 100^;
- В других триггерах локальные переменные инициализируются нулями при заходе в каждый обработчик.
Code:
!?PI;
!!IF:M^y-1 = 0^;
!!VRy-1:S5;
!?FU1;
!!IF:M^y-1 = 0^;
(16.09.2010 22:41)Berserker Wrote: [ -> ]Quote:Если про инициализацию нулями четко оговорено в справке, то будут. Тут я сомниваюсь, что про обнуление этих переменных есть в справке. Во всяком случае, точно без подробностей.
Есть. Я всегда полагался на это. Это как в Делфи вдруг окажется, что GetMem не забивает память нулями, а глобальные переменные изначально набиты мусором.
Про GetMem в справке не сказано, что есть зануление, так что странно на это полагаться. Я всегда считал, что его нету.
Quote:Я всегда считал, что его нету.
А поля динамичных структур и объектов ты не считал равными 0? А зря. Ибо функция менеджера памяти одна и та же. В Обероне это чётко прописано.
Динамические массивы после вызова GetMem заполняются нулями. А сам GetMem нулями не заполняет:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var
p: PChar;
i: Integer;
begin
GetMem(p, 4096);
for i := 1 to 4096 do
begin
Assert(p^ = #0);
inc(p);
end;
end;
Не только массивы, но и структуры. Просто указатель не структура, хотя, сказать по правде, я считал, что и обычная память будет занулена, хотя в последнем случае не полагался на это.
Нет, структуры тоже не зануляются:
Code:
type
TBigStruct = record
a: array[1..4096] of char;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
p: ^TBigStruct;
i: Integer;
begin
New(p);
for i := 1 to 4096 do
Assert(p.a[i] = #0);
end;
Признаю ошибку

. Перепроверил в другом компиляторе - так же. Выходит, только в Оберонах и иных языках со сборкой мысора зануление обязательно. Да и GlobalAlloc позволяет выставлять флаг такой.
Каков прогресс 3.59 версии на текущий момент?
В этой жизни мы ее дождемся ?)))