Op woensdag 13-08-2008 om 01:27 uur [tijdzone -0700], schreef leledumbo:
> 
> Sometimes we forgot whether a function argument is passed by reference
> or by
> value. What if the result is actually important? For instance,
> consider the
> following (WARNING: True story): 

That's not so strange story. I think this is one of the (if not the)
most common mistakes of beginning programmers. And -as always- sometimes
the most experienced also make this mistake.

And there's no way the compiler can detect this. Because this could be
intentional. If you'll give a warning on such a construct, I think about
50% of the procedures would gresult in such a warning...

And the rules are simple: (for the beginners)

procedure Align(Addr: Pointer; Alignment: PtrUInt);
-> This procedure can't change any of it's parameters

procedure Align(const Addr: Pointer; Alignment: PtrUInt);
-> This procedure can't change any of it's parameters, and Addr can't be
changed inside the procedure also.

procedure Align(var Addr: Pointer; Alignment: PtrUInt);
-> This procedure can change Addr

If you really need those warnings, you could learn yourself to always
use 'const', 'var' or 'out'. And never without any of these words.

Joost



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

Reply via email to