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
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 |