[fpc-pascal] Converting old pascal written for Pascal/MT+ compiler
Jacob Kroon
jacob.kroon at gmail.com
Tue Apr 4 09:55:47 CEST 2023
Hi Tomas,
On 4/4/23 09:51, Tomas Hajny wrote:
> 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).
>
Fair enough, good point.
Regards
Jacob
More information about the fpc-pascal
mailing list