У меня есть функция, принимающая статический двумерный массив и рассматривающий элементы элементов массива как постоянные:
void test_function(const char arr[3][3]);
Я пытаюсь вызвать такую функцию следующим образом:
char my_var[3][3] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0} };
test_function(my_var);
При компиляции с gcc (без какого-либо флага) я получаю следующее предупреждение:
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]);
Если я удалю прототип const
из test_function
, предупреждение исчезнет. Но это не совсем то, что я хочу.
При компиляции с clang как с -pedantic-errors
, так и -Wall
я не получаю предупреждения о несовместимости указателя.
Я просто хотел бы понять, почему gcc выводит такое предупреждение в этом случае. Почему мои указатели/массивы несовместимы?