Рассмотрим следующую программу:
int main()
{
int array[9];
const int (*p2)[9] = &array;
}
Он компилируется в С++ (см. live demo здесь), но не удается выполнить компиляцию в C. По умолчанию GCC дает следующие предупреждения. (См. Живое демо здесь).
prog.c: In function 'main':
prog.c:4:26: warning: initialization from incompatible pointer type [enabled by default]
const int (*p2)[9] = &array;
Но если я использую опцию -pedantic-errors
:
gcc -Os -s -Wall -std=c11 -pedantic-errors -o constptr constptr.c
он дает мне следующую ошибку компилятора
constptr.c:4:26: error: pointers to arrays with different qualifiers are incompatible in ISO C [-Wpedantic]
Почему это не удается в компиляции в C, но не в С++? Что говорит об этом в стандарте C и С++?
Если я использую const квалификатор в заявлении объявления массива, он также компилируется в C. Итак, что здесь происходит в вышеуказанной программе?