Компилируется в gcc без ошибок и предупреждений, даже с опцией -Wall
это означает, что границы массива проверяются во время выполнения и, следовательно, компилятор не может обнаружить ошибку
#include<stdio.h>
int main()
{
int a[2][3][4];
a[1][2][100] = 4 ;
return 0;
}
Однако
#include<stdio.h>
int main()
{
int a[2][3];
a[1][2][100] = 4 ;
return 0;
}
это приводит к ошибке при компиляции как:
$ gcc sample.c -Wall
sample.c: In function ‘main’:
sample.c:7: error: subscripted value is neither array nor pointer
Почему это так? в обоих кодах a [1] [2] [100] недопустимо. Тем не менее, как компилятор может обнаружить это code2, а не code1.
Особенно, когда каждый компилятор сводит весь многомерный массив в соответствующие одномерные массивы, как компилятор может выборочно осознавать этот недостаток в коде.
Разъяснения или упоминания о какой-либо книге или статье, где содержится правильное объяснение, будут с благодарностью приняты:)