Le préprocesseur C est attaché à C, mais il a une syntaxe complètement différente du langage principal:
espace blanc syntaxiquement significatif (la fin de la ligne termine une instruction, un espace après que la macro détermine le début de la liste de remplacement)
blocs basés sur des mots clés au lieu de blocs contreventés,
elif
au lieu deelse if
définitions par mots clés au lieu de déclaration-reflète-utilisation, non
=
pour la définition de valeurconseils d'une autre syntaxe de chaîne (
#include <>
vs#include ""
)évaluation paresseuse (de C, évidemment; mais 6.10.3.1 peut être lu comme impliquant également un ordre spécifique d'expansion de macro, dans les quelques endroits qui comptent)
Ça ne ressemble vraiment pas du tout à C! Techniquement , il est sa propre langue, mais il a toujours été utilisé comme une partie presque intégrale de C et il semble très étrange que ce ne serait pas intégrer avec elle syntaxiquement.
Wikipédia ne parle pas de son histoire; le Portland Pattern Repository lui donne une mention passante , mais n'entre pas dans les détails au-delà du fait qu'il a été conçu par d'autres personnes que le reste du site Web de C. Dennis Ritchie avec l'histoire de C avait probablement la réponse, mais n'est malheureusement pas est plus disponible.
En tant que moteur macro, il a évidemment une sémantique très différente du langage d'exécution, ce qui expliquerait certaines différences, mais pas les aspects de conception visuelle (il n'est pas clair non plus pour les yeux modernes s'il était initialement destiné à être capable du genre de plaisir que son système de remplacement permet, ou s’il s’agissait «simplement» d’un moyen rapide d’intégrer des fonctions à une époque antérieure à de puissants optimiseurs). Il semble que quelque chose de plus proche de ce qui est finalement devenu des modèles C ++ aurait été une évolution plus logique vers les macros, si la sémantique de type C avait en fait été le point de départ, mais il y a moins de preuves concrètes de cela que pour la syntaxe.
Avons-nous une trace de la raison pour laquelle il a été conçu de cette façon, ou quelles étaient les influences des créateurs?
Réponses:
De http://www.jslint.com/chistory.html ("Le développement du langage C" par Dennis M. Ritchie):
Il ressort du compte rendu dans la section 4 de la référence [Snyder 74] liée dans la citation ci-dessus qu'Alan Snyder avait travaillé sur un compilateur C portable (aujourd'hui on pourrait dire "retargetable"). C'était peut-être la motivation pour demander un préprocesseur.
Je n'ai cependant pas pu trouver de détails supplémentaires sur la conception du préprocesseur C lui-même, en tant que langage.
la source
Je pourrais simplement ajouter qu'il était très courant pour les langages d'assemblage d'avoir des pré-processeurs de macro assembleur qui ressemblent beaucoup à CPP.
la source