Hallo Christian,
#define true false
ist auch möglich. Und es geht ja auch nicht darum, warum man das tun sollte, sondern dass man es tun kann. Du sprachst ja davon, dass die Sprache unsaubere Konstrukte zulässt.
Gut, da hast du natürlich recht.
Möglich ist es aber beides zu benutzen, und darum ging es mir hier.
Stimmt wohl.
Niemand kann zuverlässig mit Pointer-Arithmetik umgehen. Der Nachweis wird seit 40 Jahren geführt: Out-Of-Bound-Fehler, Buffer Overflows und ähnliche Fehler sind zuverlässige Fehlerquellen und sorgen immer wieder für Remote-Execution-Lücken. Und das sage ich mit etwa 10 Jahren aktiver C-Erfahrung. Nicht umsonst sind Go und Rust entstanden.
Da kann ich dir auch nicht Widersprechen. Mir ging es um das grundsätzliche Verständnis, wie Adressen und co. funktionieren, was mir programmiertechnisch mit Zeigern sehr gut abgebildet und gezeigt werden kann.
In der Hochschule gibt es einige Studenten die schon mit einfachen int[] zahlen = new int[42];
in Java Probleme haben, da sie das Konzept der Speicherallokierung nicht verstehen. Ich denke, eine Einführung in frühen Semestern in C wäre durchaus sinnvoll.
Ich freue mich aber über Entwicklungen wir Rust – es bleibt nur abzuwarten, wie stark sie in Zukunft genutzt werden.
Freundliche Grüße
Christian