Warum ist undefiniertes Verhalten in C @ erlaub

Ich habe in letzter Zeit versucht, C zu lernen. Als ich von Java kam, war ich überrascht, dass Sie bestimmte Operationen ausführen können, die als "undefiniert" deklariert wurden.

Dies scheint mir nur extrem unsicher zu sein. Ich verstehe, es liegt in der Verantwortung des Programmierers, keine undefinierten Operationen durchzuführen, aber warum darf man überhaupt damit beginnen? Warum fängt der Compiler beispielsweise keine Array-Indizes außerhalb der Grenzen oder gar baumelnde Zeiger ab? Sie greifen einfach auf Speicherblöcke zu, auf die Sie niemals zugreifen sollten, und das ohne (offensichtlichen) guten Grund.

ls Vergleich macht Javaextra sure du tust nichtetwa dumm, Ausnahmen herumwerfen wie heiße Kuchen.

Sicher muss es einen Grund geben warum das erlaubt ist? Was ist es

ANTWORT: Nach meinem Verständnis ist der Hauptgrund die Leistung. Java hat auch undefiniertes Verhalten, obwohl es nicht als solches gekennzeichnet ist.

EDIT: eingeschränkte Frage an C