El 20/07/2017 a las 15:50, Sven Barth via fpc-pascal escribió:
>
> Am 20.07.2017 13:01 schrieb "Bo Berglund" <bo.bergl...@gmail.com
> <mailto:bo.bergl...@gmail.com>>:
> >
> > On Thu, 20 Jul 2017 11:11:50 +0200, Maciej Izak
> > <hnb.c...@gmail.com <mailto:hnb.c...@gmail.com>> wrote:
> >
> > >2017-07-20 11:03 GMT+02:00 Bo Berglund <bo.bergl...@gmail.com
> <mailto:bo.bergl...@gmail.com>>:
> > >
> > >> So since I don't really want to use a global, is it possible to
> > >> declare a local variable static in the sense that it retains its
> > >> values across calls to the procedure?
> > >> If so how is it done?
> > >>
> > >
> > >procedure foo;
> > >{$PUSH}
> > >const{$J+}
> > >  s : string ='';
> > >{$POP}
> >
> > Thanks,
> > but it looks a bit involved, probably better to use an object field
> > variable instead only accessible from the internal methods.
>
> If you don't want to use $push/$pop then you can also simply enable
> $J+ for the whole unit. But this will also mean that global constants
> are writable.
>
Well, I'm an old dog so I prefer old fashion ways. A variable that
retains its value is, from memory point of view, a global variable. I
mean, the memory is never freed, it's not freed when it goes out of
scope. So, the problem is what to do to limit the visibility to the
procedure.

What about the old interface/implementation ways? You can't limit the
visibility to the procedure, but you can limit the visibility to the
implementation, so it is globally invisible.

unit hiddenVar;

interface

  procedure foo;
  procedure resetFoo;

implementation

var
 HiddenValue:integer;

procedure foo;
begin
 writeln(HiddenValue);
 inc(HiddenValue);
end;

procedure resetFoo;
begin
 HiddenValue:=0;
end;

initialization
  resetFoo;
end.


-- 
Saludos

Santiago A.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to