Re: Weird gcc behaviour with function pointer types
- From: "Roger Miller" <roger.miller@xxxxxxxxxxxx>
- Date: 29 Mar 2007 13:39:07 -0700
On Mar 29, 3:05 am, greg <g...@xxxxxxxxxxxxxxxxxxxxx> wrote:
In my quest to eliminate C compiler warnings from
Pyrex output, I've discovered some utterly bizarre
behaviour from gcc 3.3.
The following code:
void g(struct foo *x) {
}
void f(void) {
void (*h)(struct foo *);
h = g;
}
produces the following warning:
blarg.c: In function `f':
blarg.c:6: warning: assignment from incompatible pointer type
However, adding the following line at the top:
typedef struct foo Foo;
makes the warning go away. The mere *presence* of
the typedef is all that's needed -- it doesn't even
have to be used.
This looks like a bug in gcc to me -- what do people
think?
--
Greg
If there is no outer declaration of struct foo visible to both
functions
gcc is right (it usually is when it comes to C technicalities). The
scope
of a struct declared inside a parameter list is limited to the
parameter
list itself, so the two "struct foo"s are technically different types.
Adding the typedef provides a common declaration of struct foo that is
shared by both functions. You don't really even need a typedef; a
global
declaration of just "struct foo;" should make the problem go away.
I would have expected gcc to also warn you about declaring a struct
inside
a parameter list. Did you get any warnings like that?
.
- References:
- Prev by Date: Re: How can I get the content of a web site using http library
- Next by Date: Re: Any "consumer review generators" available?
- Previous by thread: Re: Weird gcc behaviour with function pointer types
- Next by thread: Problem with class variables
- Index(es):
Relevant Pages
|
|