This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Why does 'const' make structure pointers incompatible?
- From: David Daney <ddaney at caviumnetworks dot com>
- To: gcc-help at gcc dot gnu dot org
- Cc: Ralf Baechle <ralf at linux-mips dot org>
- Date: Tue, 12 May 2009 09:55:39 -0700
- Subject: Why does 'const' make structure pointers incompatible?
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