Почему неопределенное поведение разрешено в C

Я бездельничал, пытаясь изучить C в последнее время. Исходя из Java, меня удивило, что вы можете выполнять определенные операции, объявленные как «неопределенные».

Это просто кажется мне крайне небезопасным. Я понимаю, что программист обязан не выполнять неопределенные операции, но почему это вообще разрешено начинать? Почему компилятор не улавливает, например, индексы массива за пределами границ или даже висячие указатели? Вы просто получаете доступ к блокам памяти, к которым вы никогда не должны обращаться, без веской (очевидной) причины.

Для сравнения, Java делаеточень уверен ты не делаешьчто-нибудь Глупо, бросать исключения, как горячие пирожки.

Конечно, должна быть причина, почему это разрешено? Что это?

ОТВЕТ: Насколько я понимаю, главная причина - производительность. Кроме того, Java имеет неопределенное поведение, хотя и не помечено как таковое.

РЕДАКТИРОВАТЬ: ограниченный вопрос для C

Ответы на вопрос(1)

Ваш ответ на вопрос