Strange const warning

Ian Lance Taylor iant@google.com
Thu Dec 28 17:27:00 GMT 2006


Jonathan Kinsey <jon_kinsey@hotmail.com> writes:

> The test.c file below gives a warning "passing arg 1 of `test' from
> incompatible pointer type", why is this?  I'm using gcc 3.4.2.
> 
> #include "stdio.h"
> 
> void test(const int a[1][1])
> {
> 	printf("%d\n", a[0][0]);
> }
> 
> int main()
> {
> 	int a[1][1] = {{0}};
> 	test(a);
> 	return 0;
> }

This is a generic C question, not a question specific to gcc.

The reason is that when arrays are passed as parameters, they decay to
pointers.  The effect is that the const qualifer does not work as you
expect it to.  If you remove the const, you will not get the warning.
For details on why it works this way, look for a C FAQ or a C
standards mailing list.

Ian



More information about the Gcc-help mailing list