[fpc-pascal]Two questions on initialisation of variables

Aitor Santamaria Merino aitor.sm at wanadoo.es
Wed Mar 20 23:03:16 CET 2002


Thomas Schatzl wrote:

> Subject: [fpc-pascal]Two questions on initialisation of variables
> 
> 
> 
>>Hi,
>>
>>Many of my programs start like this:
>>
>>var
>>  a, b,...: byte;
>>...
>>
>>begin
>>    a:= 5;
>>      b:= 7;
>>...
>>
>>So I was wondering if these sentences are translated into MOV sentences,
>>
> 
> Yes.
> 
> 
>>or for the contrary, compiler has optimisations that initialise the data
>>segment with the appropriate values, saving valuable CPU clocks.
>>
> 
> I doubt you'd notice the difference except you'd use ten-thousands of
> such statements. It can be used for global variables only too and it's
> only one time expense which makes it even more negligible.


Well, I am assigning strings too... (not too long strings though)


>>If the answer is no, is there a way to do this, other than
>>
>>CONST v: type = value;
>>
>>that seems to me "inelegant" for Pascal?
>>
> 
> In Delphi mode you can use
> 
> VAR v : type = value;
> 
> for global variables as well.


hmmm... I suppose I can use Delphi mode for Go32, can't I?

I have recompiled it with -Sd, and I get lots of new bugs, all of them 
being of the form:
Error: incompatible type for arg nÂș 1: Got <unkonwn type>, expected THIS 
or THAT...
I'll have to check that... (I am using a quite old version of the 
compiler yet, so this may be an old bug!)

Will Delphi mode create DJGPP-linkable code, even if I don't use classes 
and exceptions?

>>And the second is for initialisation of PChars. The examples of
>>reference guide, pag 29, seem to suggest that I don't need to New()
>>pchars. Is that right? I suppose this is only at initialisaton time.
>>
> 
> This only works when you assign a constant string to the pchar.
> 
> 
>>Suppose that for some reason I had to new a PChar, I suppose that New()
>>would only allocate 1 byte, so I'd have to use GetMem, am I right??
>>GetMem (p, maxsize+1);
>>
> 
> You should use the methods from the strings unit as mentioned in the
> docs... otoh stralloc() for example just calls getmem()...
> I recommend using ansistrings instead of pchars.

I have read about AnsiStrings, and it seems reasonable to me. I am using 
PChars just for two reasons: to be able to link with DJGPP and to be 
able to trigger direct DOS system calls that require pointers to 
null-terminated strings, and AnsiStrings, seem to fit well...

I suppose I can't use the + operator to concatenate AnsiStrings, can I?

Well, thanks for the advice!

Aitor

PD: Thanks to Peter too!





More information about the fpc-pascal mailing list