Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.12.01;
Скачать: CL | DM;

Вниз

Необязательный var-параметр в процедуре   Найти похожие ветки 

 
Михаил   (2013-02-19 17:31) [0]

Как создать процедуру с необязательным var параметром?
Аналогом является BlockRead
procedure BlockRead(var F: File; var Buf; Count: Integer [;var Result: Integer]);
Т.е. Result можно указывать при вызове, можно не указывать. Мне тоже самое нужно. Как описать такую процедуру?
Нужно именно var-параметр. Как объявить необязательный параметр для передачи по значению я знаю.


 
Ega23 ©   (2013-02-19 17:45) [1]

сделай функцию.


 
Плохиш ©   (2013-02-19 17:45) [2]

Самый быстрый способ - посмотреть реализацию в исходниках.

PS. Даю 90%, что это compiler magic.


 
Ega23 ©   (2013-02-19 17:47) [3]

function BlockRead(var F: File; var Buf; Count: Integer): Integer;

var
 i: Integer;
begin
 BlockRead(F, Buf, Count);
 if SomeCondition then
   i := BlockRead(F, Buf, Count);
end;


А var-параметр "по-умолчанию" нельзя сделать по-определению.


 
Михаил   (2013-02-19 17:50) [4]

Смотрел реализацию. Там вообще что то все непонятно.

function _BlockRead(var f: TFileRec; buffer: Pointer; recCnt: Longint; var recsRead: Longint): Longint;

......

function _BlockRead(var f: TFileRec; buffer: Pointer; recCnt: Longint; var recsRead: Longint): Longint;
begin
 Result := BlockIO(f, buffer, recCnt, recsRead, fmInput,
   {$IFDEF MSWINDOWS} ReadFileX, {$ENDIF}
   {$IFDEF POSIX} __read, {$ENDIF}
   100);
end;


Здесь параметры называются совсем по другому, нежели при вызове. И нигде не видно что четвертый параметр необязательный


 
Михаил   (2013-02-19 17:51) [5]


> Ega23 ©   (19.02.13 17:47) [3]

А как сделали в BlockRead параметр Result необязательным?


 
Вячеслав   (2013-02-19 17:53) [6]

procedure test(a : integer; var n : integer); overload;
begin
  ...
end;

procedure test(a : integer); overload;
var
  n : integer;
begin
  test(0, n);
end;

P.S. а функцию не проще использовать и игнорировать результат?


 
Михаил   (2013-02-19 17:57) [7]


> Вячеслав   (19.02.13 17:53) [6]

Функцию можно, просто у меня там вообще 2 необязательных var-параметра нужно. Думал что это просто сделать, раз в BlockRead, Reset, Rewrite ... есть такие. Ну раз это нереально или сверхгеморно, лучше сделаю перегрузку (overload)


 
Михаил   (2013-02-19 17:58) [8]

Всем спасибо!!!


 
Dimka Maslov ©   (2013-02-19 18:05) [9]

procedure Proc(Res: PInteger = nil);
begin
 if Assigned(Res) then Res^ := 100500;
end;

BlockRead, Reset, Rewrite - это compiler magic, на них требования синтаксиса не распостраняются.


 
Германн ©   (2013-02-20 01:05) [10]


> Dimka Maslov ©   (19.02.13 18:05) [9]

+
Всё что относится к модулю System - Compiler Magic.



Страницы: 1 вся ветка

Текущий архив: 2013.12.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
15-1371052001
О-Сознание
2013-06-12 19:46
2013.12.01
Флаг в LongInt.


15-1370896203
Юрий
2013-06-11 00:30
2013.12.01
С днем рождения ! 11 июня 2013 вторник


2-1361347270
O'ShinW
2013-02-20 12:01
2013.12.01
Один и тот же поток в одну и туже крит.секцию


15-1370929338
[ВладОшин]
2013-06-11 09:42
2013.12.01
Конкретный вопрос про Антивирус Касперского 2012 vs 2013


15-1370809802
Юрий
2013-06-10 00:30
2013.12.01
С днем рождения ! 10 июня 2013 понедельник