On Thu, 29 Nov 2012, Mark Morgan Lloyd wrote:

michael.vancann...@wisa.be wrote:
On Thu, 29 Nov 2012, Alexander Klenin wrote:

On Wed, Nov 28, 2012 at 2:29 PM, Jonas Maebe <jonas.ma...@elis.ugent.be> wrote:

Will global variables and static global arrays be always initialized to
zero?

Yes.

Then I suggest to amend the first paragraph of
http://www.freepascal.org/docs-html/ref/refse22.html
which directly contradicts this.

It does not directly contradict this ?

For local variables the statement is 100% correct.
You must initialize local variables.

Are there cases where locals are set to a sane initial state, e.g. for strings and dynamic arrays? What about (references to) objects?

Managed types are normally initialized. That means Ansistrings,
UnicodeString, and COM interfaces and dynamic arrays (maybe I forget some)

Classes and objects are not. I am not sure about widestrings on Windows.

But again, not always:

For instance

Function a(B : Integer) : Ansistring;

begin
  Result:=Result+' something';
end;

You would think that Result is initialized because it is managed: it is an ansistring. In fact, it is not initialized, leading sometimes to surprises.

I only learned about this relatively recently, much to my surprise.

It is one of the reasons I am reluctant to document this in detail, there
always seem to pop up new cases.

In general, you are safer off by assuming that nothing is initialized.
Initializing it again does no damage.

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to