C function const multidimensional-array argument strange warning
- by rogi
Ehllo,
I'm getting some strange warning about this code:
typedef double mat4[4][4];
void mprod4(mat4 r, const mat4 a, const mat4 b)
{
/* yes, function is empty */
}
int main()
{
mat4 mr, ma, mb;
mprod4(mr, ma, mb);
}
gcc output as follows:
$ gcc -o test test.c
test.c: In function 'main':
test.c:13: warning: passing argument 2 of 'mprod4' from incompatible pointer
type
test.c:4: note: expected 'const double (*)[4]' but argument is of type 'double
(*)[4]'
test.c:13: warning: passing argument 3 of 'mprod4' from incompatible pointer
type
test.c:4:
note: expected 'const double ()[4]' but argument is of type 'double
()[4]'
defining the function as:
void mprod4(mat4 r, mat4 a, mat4 b)
{
}
OR defining matrices at main as:
mat4 mr;
const mat4 ma;
const mat4 mb;
OR calling teh function in main as:
mprod4(mr, (const double(*)[4])ma, (const double(*)[4])mb);
OR even defining mat4 as:
typedef double mat4[16];
make teh warning go away. Wat is happening here? Am I doing something invalid?
gcc version is 4.4.3 if relevant.
Thanks for your attention.