Все зависит от типа «i». В Delphi переменные цикла обычно объявляются как «i: Integer», но это также может быть «i: PChar», который разрешается в PAnsiChar во всем, что ниже Delphi 2009 и FPC (я предполагаю здесь), и в PWideChar на Delphi 2009 и Delphi.NET (тоже угадываю).
Поскольку Delphi 2009 может выполнять математику указателей, Inc(i) также может выполняться для типизированных указателей (если они определены с включенным POINTER_MATH).
Например:
type
PSomeRecord = ^RSomeRecord;
RSomeRecord = record
Value1: Integer;
Value2: Double;
end;
var
i: PSomeRecord;
procedure Test;
begin
Inc(i); // This line increases i with SizeOf(RSomeRecord) bytes, thanks to POINTER_MATH !
end;
Как уже сказали другие ответчики: относительно легко увидеть, что компилятор сделал из вашего кода, открыв:
Представления > Окна отладки > Windows ЦП > Дизассемблирование
Обратите внимание, что параметры компилятора, такие как OPTIMIZATION, OVERFLOW_CHECKS и RANGE_CHECKS, могут повлиять на окончательный результат, поэтому вам следует позаботиться о том, чтобы настройки соответствовали вашим предпочтениям.
Совет по этому поводу: в каждом модуле $INCLUDE файл, который управляет параметрами компилятора, таким образом, вы не потеряете настройки, когда ваш .bdsproj или .dproj каким-либо образом поврежден. (Посмотрите на исходный код JCL для хорошего примера)
person
Community
schedule
26.09.2008