Mam następujący kod:Problemy z const w C kiedy posiadające typedef i tablicę
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;
}
który nie zostanie skompilowany przy użyciu
gcc main.c -std=gnu99 -O0 -o main
ale dają Błąd
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]){
^
Jeśli Z drugiej strony usuwam wymóg const w funkcji f. Wszystko działa dobrze. Nie mogę się dowiedzieć, co jest nie tak?
Zobacz także: http://stackoverflow.com/questions/28062095/pass-a-two-dimensional-array-to-a-function-of-constant-parameter –
Jak wspomniano w mój link dupe, jest to prawdopodobnie usterka w systemie typu C. Myślę, że to podkreśla, dlaczego ukrywanie wskaźników lub tablic za 'typedef' nie jest dobrym pomysłem. – user694733
Nie jest to dokładny duplikat, ponieważ powiązane pytanie dotyczyło wskaźników tablicy. W takim przypadku istnieją tablice 2D. Odpowiedź będzie jednakowa. – Lundin