[fpc-pascal] Converting old pascal written for Pascal/MT+ compiler

Tomas Hajny XHajT03 at hajny.biz
Tue Apr 4 09:51:41 CEST 2023


On 2023-04-04 09:43, Jacob Kroon wrote:


Hi Jacob,

>> You don't need to change "var" to "const" - if you want to ensure the 
>> variables to persist in between the function/procedure runs, you need 
>> to move them to the global level, i.e. outside of the 
>> functions/procedures. It is not advisable as a general practice (to 
>> keep all variables globally), because then you might e.g. access the 
>> same variable from multiple functions by mistake, but it would 
>> probably solve your issue. Obviously, you might need to solve 
>> potential conflicts if you use the same variable names in multiple 
>> functions/procedures (e.g. by prepending the function/procedure name 
>> to the variable name or something like that).
>> 
> 
> I could move them to global scope, and add a prefix to avoid name
> collisions, but using a "const" section seems more readable to me
> since I don't need to add a prefix.
> 
> The wiki page says (https://wiki.freepascal.org/Const):
> 
> "The declaration const in a Pascal program is used to inform the
> compiler that certain identifiers which are being declared are
> constants, that is, they are initialized with a specific value at
> compile time as opposed to a variable which is initialized at run
> time.
> 
> However, the default setting in Free Pascal is to allow const
> identifiers to be re-assigned to."
> 
> Then it says there is a flag to make reassigning to a const variable
> an error. But if I ignore that, it would seem this is just what I
> need, since this seems to make the variable have a whole-program
> lifetime, no ?
> 
> What is the technical downside to using "const", or is it just cosmetic 
> ?

If you read the documentation (wiki or the real documentation in 
PDF/HTML etc.) properly, you don't find there anything saying that 
constants declared locally within functions or procedures are guaranteed 
to keep their modified values across runs of that function/procedure. It 
might behave like that, but you shouldn't rely on it unless it's a const 
on a global level (and then renaming may still be needed in case of 
conflicts).

Tomas


More information about the fpc-pascal mailing list