Consider this code (simplified from Linux kernel):
----------- foo.c -----------
struct B {
int f1;
int f2;
int f3;
};
struct A {
int (* foo)(struct B *);
};
int bar(const struct B *a)
{
return a->f1 + a->f2 + a->f3;
}
struct A baz = {bar};
-----------8<---------------
$ gcc --version
gcc (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8)
[...]
$ gcc -Wall -c foo.c
foo.c:16: warning: initialization from incompatible pointer type
Why do I get the warning?
In most cases a pointer to an object can be passed to functions taking a
pointer to a const object with no warning being issued.
Thanks,
David Daney