Am 13.11.2013 11:07, schrieb Frederic Da Vitoria:
2013/11/13 Rainer Stratmann <rainerstratm...@t-online.de
<mailto:rainerstratm...@t-online.de>>
On Wednesday 13 November 2013 10:52:23 you wrote:
> 2013/11/13 Rainer Stratmann <rainerstratm...@t-online.de
<mailto:rainerstratm...@t-online.de>>
> > Is there a description of the behaviour of const and var in
this case?
> > Why is it not both const or both var?
>
> "source" is where the data "comes from", so the procedure won't
modify it
> (if there is no memory overlap between source and dest), so it
is declared
> as "const"
> "dest" is where the data is copied to, so the procedure will
necessarily
> modify it (if "count" is <> 0), and the procedure should modify
so it is
> declared as "var". Actually, IMO it could be declared as "out",
this would
> avoid a meaningless warning.
But why does it work without specifying the vars more exactly like
in other
cases?
You mean, how can it work without using typed variables? In Pascal,
you don't have to give the type of a parameter, although 99.99% of the
times you should do it. If you don't do it, you could as well use
assembly :-) Actually, that's probably how Move is written: in
assembly language. Of course, since the types were not given in the
parameter declaration of Move, the compiler can't know the size of the
data, and you have to give the compiler some indication. That's what
"count" is for. Move considers the memory as 2 big arrays of bytes,
one starting at "source", and the second at "dest".
The fallback implementation (for new architectures) is written in
Pascal. See $fpcdir\rtl\inc\generic.inc.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal