![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Inc и Succ
CMOS © (2006-02-05 20:50:00)Что такое Inc(x) в Delphi и Pascal?
inc x
или
add x, 1; я думаю именно так
А что такое Succ(x)?
inc x
или
add x, 1
palva (2006-02-07 21:12:00) [1]begin...end © (07.02.06 17:17) [16]
> Порядкового.
Точно.
begin...end (2006-02-07 17:17:00) [2]> palva © (07.02.06 17:09) [15]
> перечислимого
Порядкового.
palva (2006-02-07 17:09:00) [3]> Inc увеличивает, Succ не увеличивает.
Если говорить строго, то не увеличивает, а "берет следующий" для перечислимого типа. Например можно написать:
var b: Boolean;
begin
// ...
b := False;
Inc(b);
WriteLn(b) // True
end.
Zeqfreed (2006-02-07 14:26:00) [4]Хотя исходный код увидеть нельзя — можно увидеть получившийся:
procedure Test();
var
a, b : Integer;
begin
a := 0;
Inc(a);
b := Succ(a);
ShowMessage(Format('Incremented a equals %d; The successor of a is %d', [a, b]));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Test();
end;
Получаем:
a := 0;
xor ebx, ebx
Inc(a);
inc ebx
b := Succ(a);
lea esi, [ebx+$01]
evvcom (2006-02-07 14:23:00) [5]
> add x, 1 - это то же самое, но на ассемблере
касаемо типа PInteger, например, будет
add x, 4
в 32-разрядной версии Windows.
Vlad (2006-02-07 14:21:00) [6]
> CMOS © (07.02.06 14:13) [9]
> В любом учебнике говорится, что Inc и Succ увеличивают значение
> переменной. Мне же нужен их исходный код.
Inc увеличивает, Succ не увеличивает.
Digitman (2006-02-07 14:18:00) [7]
> В любом учебнике говорится, что Inc и Succ увеличивают значение
> переменной
Врешь ведь).. насчет "любого"...
Приведи цитату и ссылку на "учебник" ..
MBo (2006-02-07 14:17:00) [8]>Мне же нужен их исходный код
А его нет ;)
Это "Compiler Magic" - при компиляции генерируется код соответственно аргументу (или аргументАМ для Inc)
CMOS (2006-02-07 14:13:00) [9]В любом учебнике говорится, что Inc и Succ увеличивают значение переменной. Мне же нужен их исходный код.
procedure Inc;
begin
...
end;
INKDEC (2006-02-06 02:49:00) [10]В основном inc(x) и dec(x) мспользуется для увеличения или уменьшения указателя на единицу:
procedure TForm1.FormCreate(Sender: TObject);
const A='0123qwe';
var Buf1: Pointer;
B:byte;
i:word;
begin
Buf1:=@a[1];
for i:=1 to Length(A) do
begin
B:= PByte(Buf1)^ ;
Inc(PByte(Buf1));
Memo1.Lines.add(char(b));
end;
end;
Т.К. нельзя просто написать
Buf1:=Buf1+1
Германн (2006-02-06 01:52:00) [11]
> inc(x) увеличит значение x на 1
> add x, 1 - это то же самое, но на ассемблере
Это, имхо не то же самое, хотя мне тут уже возражали по этому поводу. Хотя кто в нынешнее время обращает внимание на RangeCheck? :(
ВМ_ (2006-02-05 23:30:00) [12]И всё-таки.
inc(x) увеличит значение x на 1
add x, 1 - это то же самое, но на ассемблере
succ(x) вернёт следующее значение, а с самой переменной x ничего не сделает
Anatoly Podgoretsky (2006-02-05 21:24:00) [13]Наверно он решил изучить язык с помощью форума, вместо чтения книг.
Наивный.
Джо (2006-02-05 21:10:00) [14]> [3] Zeqfreed © (05.02.06 21:09)
> Следующий вопрос будет про Dec и Pred :)
Лиха беда начало :)
Zeqfreed (2006-02-05 21:09:00) [15]Следующий вопрос будет про Dec и Pred :)
Джо (2006-02-05 21:06:00) [16]Successor (англ.) — последующий элемент.
Anatoly Podgoretsky (2006-02-05 21:04:00) [17]Справку смотрел? Учебники читал?