Ich habe eine Funktion ein statisches zweidimensionales Array zu nehmen und die Elemente der Elemente des Arrays Behandlung als konstant:Unverträgliche Zeigertypen und Konstantheit
void test_function(const char arr[3][3]);
Ich versuche, eine solche Funktion zu nennen, wie folgt :
char my_var[3][3] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0} };
test_function(my_var);
Wenn mit gcc (ohne Flagge) kompilieren, erhalte ich die folgende Warnung:
test.c:9:8: warning: passing argument 1 of 'test_function' from incompatible pointer type
test_function(my_var);
^
test.c:4:6: note: expected 'const char (*)[3]' but argument is of type 'char (*)[3]'
void test_function(const char arr[3][3]);
Wenn ich den const
von Prototyp entfernen, wird die Warnung weg. Aber es ist nicht das, was ich will.
Beim Kompilieren mit clang mit beiden -pedantic-errors
und -Wall
bekomme ich keine Warnung über Zeiger Inkompatibilität.
Ich möchte nur verstehen, warum gcc in diesem Fall eine solche Warnung ausgibt. Warum sollten meine Zeiger/Arrays nicht kompatibel sein?
Ich möchte sagen, das ist ein GCC-Bug - die Tatsache, dass Clang überhaupt keine Diagnose erzeugt, macht mich ziemlich misstrauisch. Übrigens sollten Sie beachten, dass es sich tatsächlich um eine Warnung und nicht um einen Fehler handelt (Sie scheinen sich mit '-Werror' kompiliert zu haben). – nneonneo