Der C-Präprozessor ist an C angehängt, hat jedoch eine völlig andere Syntax als die Hauptsprache:
syntaktisch signifikantes Leerzeichen (Zeilenende beendet eine Anweisung, Lücke nachdem das Makro den Anfang der Ersetzungsliste bestimmt)
schlüsselwortbasierte Blöcke anstelle von geschweiften Blöcken
elif
anstelle vonelse if
Schlüsselwort-geführte Definitionen anstelle von Deklaration-Reflects-Use, nein
=
für WertedefinitionHinweise auf eine alternative String-Syntax (
#include <>
vs#include ""
)Lazy Evaluation (von C natürlich; aber 6.10.3.1 kann so gelesen werden , dass es an den wenigen wichtigen Stellen auch eine bestimmte Reihenfolge der Makroexpansion impliziert )
Es sieht wirklich gar nicht nach C aus! Technisch es ist seine eigene Sprache, aber es ist immer als fast-integraler Bestandteil C verwendet worden und es scheint sehr seltsam , dass es nicht mit ihm syntaktisch integrieren würde.
Wikipedia spricht nicht über seine Geschichte. Das Portland Pattern Repository erwähnt dies nur gelegentlich , geht jedoch nicht weiter ins Detail, als dass es von anderen Personen als dem Rest von C. entworfen wurde. Dennis Ritchies Website mit der Geschichte von C hatte wahrscheinlich die Antwort, ist aber leider nicht länger Erhältlich.
Als Makromodul hat es offensichtlich eine ganz andere Semantik als die Laufzeitsprache, was einige Unterschiede erklären würde , aber nicht die visuellen Designaspekte (für moderne Augen ist es auch unklar, ob es ursprünglich dazu gedacht war , die Art von Spaß zu ermöglichen , die es macht Ersatzsystem erlaubt, oder ob es "nur" eine sinnvolle Möglichkeit war, Funktionen in einer Zeit vor leistungsfähigen Optimierern inline zu schalten). Es fühlt sich so an, als wäre etwas näher an dem, was schließlich zu C ++ - Vorlagen wurde, eine logischere Entwicklung in Richtung Makros gewesen, wenn C-ähnliche Semantik tatsächlich der Ausgangspunkt gewesen wäre, aber es gibt weniger konkrete Beweise dafür als für die Syntax.
Haben wir Aufzeichnungen darüber, warum es so entworfen wurde oder welche Einflüsse die Schöpfer hatten?
Antworten:
Aus http://www.jslint.com/chistory.html ("Die Entwicklung der C-Sprache" von Dennis M. Ritchie):
Aus dem im obigen Zitat verlinkten Bericht in Abschnitt 4 der [Snyder 74] -Referenz geht hervor, dass Alan Snyder an einem portablen C-Compiler (heute könnte man sagen, "retargetable") gearbeitet hat. Vielleicht war dies die Motivation, nach einem Präprozessor zu fragen.
Ich konnte jedoch keine zusätzlichen Details zum Design des C-Präprozessors selbst als Sprache finden.
quelle
Ich möchte nur hinzufügen, dass Assemblersprachen häufig Vorprozessoren für Makro-Assembler haben, die CPP sehr ähnlich sehen.
quelle