[fpc-devel] void test( void *data ) to procedure test( var data); ? is it safe ?

Skybuck Flying skybuck2000 at hotmail.com
Mon Jun 20 18:11:35 CEST 2011


The difference is actually:

1. Pascal has call by value and call by reference.
2. C only has call by value.

Because of limitation 2, C programmers use the pointer trick to pass the 
address of a variable so it can be changed inside the routine, example:

1. C call by value (default):

void test( int a )
{
  a = 5; // after routine exists, value is lost.
}

test( b );

2. C call by value (reference trick):

void test( int *a ) <- pointer to variable of integer trick.
{
  *a = 5;
}

test( &b ); // <- address of variable trick.

For noobies/novice programmers this makes C a bad language since 
noobies/novice programmers are still learning to design software codes and 
will often need to change call by value to call by reference or vice versa 
and then it becomes a hurdle to change all these call sites, not mention 
confusion.

For experienced programmers it's also a reall burden to use * everywhere and 
& everywhere, everywhere reference comes into play.

Passing real pointers and working with them becomes even more tricky and 
requires even more stars/asterixes.

A very bad problem which was easily solved in pascal:

procedure test( var a : integer );
begin
  a := 5;
end;

test( a );

^ No stupid symbols needed ! ;) Much user friendly and pretty much does the 
same thing.

Why make things more difficult then absolutely necessary huh ?! ;) :) =D

Only thing I can imagine is very very very maybe it's easier to write a 
"call by value compiler" than a "call by reference compiler" ?!? But does 
sound a bit like bullshit to me ?! ;) :)

Bye,
  Skybuck =D 




More information about the fpc-devel mailing list