Il preprocessore C è collegato a C, ma ha una sintassi completamente diversa dalla lingua principale:
spazi bianchi sintatticamente significativi (fine della riga termina un'istruzione, gap dopo che la macro determina l'inizio dell'elenco di sostituzione)
blocchi basati su parole chiave anziché blocchi rinforzati,
elif
anzichéelse if
definizioni guidate da parole chiave anziché dichiarazione-riflette-uso, no
=
per la definizione di valoresuggerimenti di una sintassi di stringa alternativa (
#include <>
vs#include ""
)valutazione pigra (di C, ovviamente; ma 6.10.3.1 può essere letto come implicante anche un ordine specifico di espansione macro, nei pochi punti che contano)
Non sembra proprio C! Tecnicamente è il suo linguaggio, ma è sempre stato usato come parte quasi integrale di C e sembra molto strano che non si integrasse sintatticamente con esso.
Wikipedia non parla della sua storia; il Portland Pattern Repository gli dà una menzione passeggera , ma non va nei dettagli oltre al fatto che è stato progettato da altre persone rispetto al resto del sito Web di C. Dennis Ritchie con la storia di C probabilmente ha avuto la risposta, ma sfortunatamente è no più disponibile.
Come motore macro, ha ovviamente una semantica molto diversa dal linguaggio di runtime, il che spiegherebbe alcune differenze, ma non gli aspetti del design visivo (non è anche chiaro agli occhi moderni se fosse originariamente inteso come capace del tipo di divertimento che il suo sistema di sostituzione consente, o se era "solo" un modo conveniente per incorporare le funzioni in un tempo prima di potenti ottimizzatori). Sembra qualcosa di più vicino a quello che alla fine sarebbe diventato un modello C ++ sarebbe stata un'evoluzione più logica verso le macro, se la semantica simile al C fosse stata in realtà il punto di partenza, ma ci sono prove meno concrete di ciò di quanto non ci sia per la sintassi.
Abbiamo qualche traccia del perché è stato progettato in questo modo, o quali sono state le influenze dei creatori?