Il preprocessore C è collegato a C, ma ha una sintassi completamente diversa dalla lingua principale:
-
spazio bianco sintatticamente significativo (fine della riga termina un'istruzione, gap dopo che la macro determina l'inizio della lista di sostituzione)
-
blocchi basati su parole chiave anziché blocchi rinforzati,
elif
anzichéelse if
-
definizioni guidate da parole chiave invece di dichiarazioni-reflect-use, no
=
per la definizione del valore -
suggerimenti di una sintassi di stringa alternativa (
#include <>
vs#include ""
) -
valutazione lazy (di C, ovviamente, ma 6.10.3.1 può essere letto come implicando un ordine specifico di espansione macro, nei pochi luoghi quello conta)
In realtà non sembra affatto C! Tecnicamente è il suo linguaggio, ma è sempre stato usato come una parte quasi integrale di C e sembra molto strano che non si integri sintatticamente con esso.
Wikipedia non parla della sua storia; il deposito di Portland Pattern dà una menzione passeggera , ma non entra nei dettagli oltre al fatto che è stato progettato da altri le persone rispetto al resto del sito di C. Dennis Ritchie con la storia di C probabilmente hanno avuto la risposta, ma sfortunatamente non sono più disponibili.
Come motore macro, ovviamente ha una semantica molto diversa dal linguaggio runtime, che spiegherebbe alcune differenze, ma non gli aspetti del design visivo (non è chiaro agli occhi moderni se sia stato originariamente inteso come capace del individuo di divertente che il sistema di sostituzione lo consente, o se fosse "solo" un modo opportuno per integrare le funzioni in un momento precedente ai potenti ottimizzatori). Sembra che qualcosa di più vicino a quelli che alla fine sarebbero diventati modelli C ++ sarebbe stata un'evoluzione più logica verso le macro, se la semantica di tipo C fosse stata effettivamente il punto di partenza, ma ci sono prove meno concrete di ciò che c'è per la sintassi.
Abbiamo una registrazione del motivo per cui è stato progettato in questo modo o quali sono state le influenze dei creatori?