Re: Walker/mutator prototype.

From: Kurt Roeckx <Q(at)ping(dot)be>
To: Greg Stark <gsstark(at)mit(dot)edu>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Walker/mutator prototype.
Date: 2003-12-14 13:30:57
Message-ID: 20031214133056.GA20410@ping.be
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Sat, Dec 13, 2003 at 10:24:23PM -0500, Greg Stark wrote:
> Kurt Roeckx <Q(at)ping(dot)be> writes:
>
> > I'm trying to change all the walkers and mutators to have a more
> > strict prototype. I had to do this with lots of casts.
> >
> > I don't really like the idea of having all those generic pointer
> > types (Node * and void *), but currently see no better way to deal
> > with it.
>
> This code is incorrect. You have to declare the function prototype to match
> the parameters that will actually be passed, not to match how they'll be used.
>
> By casting the function pointers you're confusing the compiler into thinking
> the variables are already the correct format and don't need to be cast.
>
> The correct way to write this type of code is to prototype the functions with
> void* or Node* or whatever variables will actually be passed, then immediately
> assign the arguments to a local variable of the correct type.

I did start by changing all the context's to void *, but you'll
loose the real type that it gets called with, so the other calls
will not generate warnings anymore because of wrong type. So I
just casted the function pointers to the right type.

Anyway, I'll change it so that the last argument is void *
everywhere.

Kurt

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruno Wolff III 2003-12-14 14:40:30 Re: ORDER BY and DISTINCT ON
Previous Message Dennis Bjorklund 2003-12-14 07:44:33 Function argument names