Недавно мой коллега укусил плохо, выписав из строя статический массив в стеке (он добавил к нему элемент без увеличения размера массива). Разве компилятор не поймает такую ошибку? Следующий код компилируется с помощью gcc, даже с параметрами -Wall -Wextra
, и все же он явно ошибочен:
int main(void)
{
int a[10];
a[13] = 3; // oops, overwrote the return address
return 0;
}
Я уверен, что это поведение undefined, хотя я не могу найти отрывок из стандарта C99, говорящий так на данный момент. Но в простейшем случае, когда размер массива известен как время компиляции, а индексы известны во время компиляции, не должен ли компилятор выдавать предупреждение как минимум?