C function const multidimensional-array argument strange warning

Posted by rogi on Stack Overflow See other posts from Stack Overflow or by rogi
Published on 2011-01-01T06:25:47Z Indexed on 2011/01/01 6:54 UTC
Read the original article Hit count: 362

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.

© Stack Overflow or respective owner

Related posts about c

    Related posts about function