Mein Verständnis der Geschichte davon ist, dass es auf zwei Hauptpunkten basiert ...
Erstens zogen es die Sprachautoren vor, die Syntax variablenzentriert anstatt typzentriert zu gestalten. Das heißt, sie wollten, dass ein Programmierer sich die Deklaration ansieht und denkt: "Wenn ich den Ausdruck schreibe *func(arg)
, führt das zu einem int
; wenn ich schreibe, *arg[N]
habe ich einen Gleitkomma" anstatt " func
muss ein Zeiger auf eine Funktion sein, die dies ausführt und die Rückkehr , dass “.
Der C-Eintrag auf Wikipedia behauptet, dass:
Ritchies Idee war es, Identifikatoren in Kontexten zu deklarieren, die ihrer Verwendung ähneln: "Deklaration spiegelt Verwendung wider".
... unter Berufung auf Seite 122 von K & R2, die ich leider nicht vorlegen muss, um das erweiterte Angebot für Sie zu finden.
Zweitens ist es wirklich sehr, sehr schwierig, eine Syntax für die Deklaration zu finden, die konsistent ist, wenn Sie mit beliebigen Indirektionsebenen arbeiten. Ihr Beispiel eignet sich möglicherweise gut, um den Typ auszudrücken, den Sie sich dort spontan ausgedacht haben. Skaliert es sich jedoch auf eine Funktion, die einen Zeiger auf ein Array dieser Typen nimmt und ein anderes abscheuliches Durcheinander zurückgibt? (Vielleicht schon, aber hast du nachgesehen? Kannst du es beweisen? ).
Denken Sie daran, dass ein Teil des Erfolgs von C auf der Tatsache beruht, dass Compiler für viele verschiedene Plattformen geschrieben wurden. Es wäre daher möglicherweise besser gewesen, ein gewisses Maß an Lesbarkeit zu ignorieren, um das Schreiben von Compilern zu vereinfachen.
Trotzdem bin ich kein Experte für Sprachgrammatik oder Compilerschreiben. Aber ich weiß genug, um zu wissen, dass es viel zu wissen gibt;)