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