[fpc-pascal] Converting old pascal written for Pascal/MT+ compiler
tsiegel at softcon.com
tsiegel at softcon.com
Tue Apr 4 20:34:10 CEST 2023
I'm not positive, because I've never used them, but I'm pretty sure
variables configured as const, can't be changed once they're defined.
If that's your intent, then feel free to use them, but it sounds like
you're trying to make variables (not constant values) last for the whole
program, with manipulation being allowed. In that, case, simply define
them in the var section before you do any of the functions and
procedures. That will make them visible for the whole program, and they
won't go out of scope. I know many folks contend that global variables
should be kept to a minimum, and scope should be carefully evaluated,
and only allow variables to be usable when they're actually needed, and
to some degree, I agree, but there's times when it's just too darned
convenient to have something accessible for the whole program over
multiple functions/procedures, and in those cases, I see nothing wrong
with having as many globals as you need.
Often, when I'm doing a quick and dirty program, (I.E. one to change a
data file from one format to another), I won't even bother with
functions and procedures, just write the whole program as one big main
procedure, since it's only being run once or twice, then never used
again, I see nothing wrong with this approach either, and in that case,
all variables are global.
No reason you can't do the same, and not depend on quirks of the
compiler to keep your items in scope especially when they clearly
shouldn't be.
Am 04.04.2023 um 08:16 schrieb Jacob Kroon via fpc-pascal:
>>
>> I was able to write a couple of perl-scripts that are able to convert
>> my old Pascal sources to something that fpc can parse. Amongst other
>> things, the scripts inject the "public name"/"external name"
>> annotations so that the program can link.
>>
>> But I suspect I have a new problem: With the old Pascal/MT+ compiler
>> it would appear that local variables declared in functions/procedures
>> have a life-time that spans the whole program, like a "static"
>> declared variable in C. With fpc, it looks like locally declared
>> variables are automatic, put on the stack(?), and so they go out of
>> existence once out of scope ?
>
>> The program depends on this feature in the old compiler. I did some
>> googling and found that putting local variables in a "const" section
>> instead of "var" would make them have a "whole-program" lifetime, but
>> then I need to provide them with an initial value.
>>
>> Do I have any other option besides changing from "var" to "const"
>> everywhere, and provide initial values in all declarations ?
>>
>> Regards
>> Jacob
>
More information about the fpc-pascal
mailing list