ho il seguente codice:Problemi con const in C, quando con typedef e la matrice
typedef float vec3_t[3];
void f(const vec3_t v[2]){
// do stuff
}
int main(int argc, char * argv[]){
vec3_t v[2];
v[2][1] = 1;
f(v);
return 0;
}
che non verrà compilato utilizzando
gcc main.c -std=gnu99 -O0 -o main
ma dare l'errore
main.c: In function ‘main’:'
main.c:293:5: warning: passing argument 1 of ‘f’ from incompatible pointer type [enabled by default]
f(v);
^
main.c:286:6: note: expected ‘const float (*)[3]’ but argument is of type ‘float (*)[3]’
void f(const vec3_t v[2]){
^
Se D'altra parte rimuovo il requisito const nella funzione f. Funziona tutto bene. Non riesco a capire cosa c'è che non va ??
Consulta anche: http://stackoverflow.com/questions/28062095/pass-a-two-dimensional-array-to-a-function-of-constant-parameter –
Come accennato nel mio link vittima, questo è probabilmente un difetto nel sistema di tipo C. Penso che questo evidenzi il motivo per cui nascondere i puntatori o gli array dietro "typedef" non è una buona idea. – user694733
Non è un duplicato esatto, perché la domanda collegata riguardava i puntatori degli array. In questo caso ci sono array 2D. La risposta sarà praticamente la stessa però. – Lundin