Rada>Ещё интереная особенность - блок не может декларироать локальные имена, если они попадаются в блоках выше.
Да, меня это тоже добило в своё время. Тут сказать забыл. Глобальные переменные перекрывать нельзя :-/
И старый трюк, когда раньше, если не знаешь, используется уже это имя в данном пространстве имён или нет, просто заключал его использование в { ... } больше не проходит. ИМХО, надёжность кода от этого только упала. Теперь чаще придётся вычитывать чужие куски кода, что не есть правильная идеология.
Rada>Но это - не тупизм, а хорошее решение.[»]
А я - против
Fakas>Рома, ты не прав . Раз было объявление :Fakas>var A,B,C : byte;Fakas>то это переменные, со всеми вытекающими.
Если я написал b=5, может ли в разное время в b оказаться разное значение? Нет. Поэтому до первого реального изменения
нормальный компилятор учитывает, что значение переменной
константное и проводит соответствующую оптимизацию.
Fakas>А вот что бы были константы,то надо :Fakas>var A : byte;Fakas>A := 10+10;Fakas>Но при этом компайлер не будет мучаться, он на этапе компиляции сложит 10+10, и занесет в А 20.
Он итак занесёт 20. Даже при a = b + b
code cpp
int a, b;
b = 5;
a = b + b;
printf("%d", a);
code text
00000 6a 0a push 10 ; 0000000aH
00002 68 00 00 00 00 push OFFSET FLAT:<string>
00007 e8 00 00 00 00 call _printf
Зачем считать при исполнении то, что считается при компилляции?
code cpp
int sum=0;
for(int i=1; i<=10; i++)
sum += i;
printf("%d", sum);
code text
00000 6a 37 push 55 ; 00000037H
00002 68 00 00 00 00 push OFFSET FLAT:<string>
00007 e8 00 00 00 00 call _printf