Le code C ++ est-il converti en C avant la compilation? P>
6 Réponses :
pas dans la plupart des compilateurs modernes. P>
Le compilateur original C ++ était en réalité un préprocesseur. Il généré C code C, qui a ensuite été compilé par un compilateur C. P>
CFRONT n'était pas un "préprocesseur", c'était un compilateur complet pré-std C ++.
Au début des compilateurs C ++, certains l'ont fait de cette façon. Je n'ai pas vu de compilateur C ++ mis en œuvre de cette façon depuis la fin des années 1980 cependant. P>
Comeau C ++ est toujours mis en œuvre de cette façon.
Non, mais comme la plupart des mythes, il y a une rupture de la vérité à cela. Le compilateur d'origine pour C avec des classes (qui est devenu plus tard C ++) a été surnommé CFRONT et s'est traduit par c. P>
Le premier CFRONT compilait la langue appelée "C avec des classes" mais des versions ultérieures compilées réelles précoces pré-std C ++, pas seulement "C avec des classes".
Quelques compilateurs C ++ (le CFRT d'origine, Comeau C ++) Utilisez C comme langue intermédiaire pendant la compilation. La plupart des compilateurs C ++ utilisent d'autres langueurs intermédiaires (par exemple LLVM). P>
Edit: Comme il semble y avoir un malentendu sur l'histoire: "C avec des classes" a commencé à utiliser un prétraiteur appelé "CPRE". À ce moment-là, il a été considéré comme strictement comme un dialecte de C, pas une langue séparée en soi. En décembre 1983, les gens commençaient à le considérer comme une langue distincte et le nom C ++ a été inventé. Comme cela se produit, le développement de CFRT a débuté en avril 1983, une version raisonnablement utilisable est devenue disponible (à un peu de quelques-uns) à peu près au même moment que le nom "C ++" est entré en cours d'utilisation. Cela semble être la plupart des coïncidences cependant. P>
En ce qui concerne la production C comme sa sortie, qui était vraiment assez fréquente sur UNIX. Juste par exemple, le compilateur Berkeley Pascal et au moins deux compilateurs de Fortrans ont également produit C comme leur production. P>
Il y a cependant une énorme différence entre CPRE et CFRONT. Bien que les deux produits c comme leur production, CPRE n'a pratiquement pas une vérification de la syntaxe de son propre - il a cherché quelques éléments spécifiques et a fait une traduction relativement mécanique sur eux. Ce n'était pas avant que le compilateur C ait examiné le résultat qu'une réelle analyse syntaxique a été faite. Si votre code contenait une erreur de syntaxe, il était presque certain qu'il ne serait pas attrapé que lorsque le compilateur C n'a pas affiché la sortie de CPRE. P>
CFRONT, cependant, a fait une analyse syntaxique complète du code source lui-même, donc (à court d'un bogue dans son générateur de code) que vous avez jamais em> voir une erreur de syntaxe du compilateur C. Le compilateur C a été simplement utilisé comme générateur de code afin que personne ne soit nécessaire pour réécrire le CFRONT pour accueillir différents processeurs, formats de fichier d'objet, etc. p>
Si vous voulez entrer dans plus de détails, le chapitre 2 de la conception et l'évolution de C ++ EM> est consacré presque entièrement au châssis de "C avec des classes" (et il y a divers autres détails à ce sujet répandu dans tout le livre). P>
Comme d'autres ont répondu. Non. P>
Toutefois, si vous souhaitez utiliser une langue de OOP comme C # et que votre code compilait dans CI vous recommande de jeter un coup d'oeil sur Vala . P>
Cela est largement pertinent que la question actuelle est posée et ressemble beaucoup à SPAM s'il n'était pas venu d'un utilisateur à 604 réputation. Je soupçonne que vous essayez simplement d'être utile cependant, je ne vous pénaliserai donc pas, mais cette réponse n'est pas terriblement utile à un utilisateur C ++.
Le titre semble demander est C ++ un superset de c, c'est-à-dire que vous pouvez simplement jeter un code C dans un compilateur C ++ et fonctionnera? Dans ce cas, oui c'est, sorte de ... p>
Une différence majeure est que c réalise automatiquement les pointeurs pour vous, C ++ ne le fait pas, vous devez lancer la manuelle ... p>
Quelqu'un se souvient de tout autre chose? P>
C'est tout ce que je me souviens de l'horrible processus de conversion d'un projet de C massif pour compiler sous C ++ pour une raison quelconque ... P>
La plupart des fonctionnalités de C99 (celles qui ne sont pas empruntées à C ++) ne sont pas dans la norme actuelle, certaines ne seront pas dans la norme à venir non plus. Des matrices les plus notamment dynamiques. En C ++, la taille fait partie du type de la matrice et permettrait aux tableaux dynamiques impliquant qu'il existe un élément dans la langue dont le type ne serait pas connu au moment de la compilation, rompant le système de type.
C'est trop fort une déclaration en fait; Vous pouvez définir les systèmes de type de telle sorte que "une matrice dynamique de type T" soit le type de compilation. Cela impliquerait que la taille de la matrice ne fait qu'une partie du type lorsqu'une matrice n'est pas dynamique, et donc des tableaux statiques et dynamiques auraient des types différents. Pas une grosse affaire imo; En fait, cela semble évident. Les parties difficiles sont WRT sur Taillef CODE> - Ce n'est plus toujours une glace.
Il convient de noter que votre question de titre est très différente de votre question du corps.
Il n'y a aucune exigence dans la spécification de langue C ++ pour convertir C ++ en C avant la compilation. La spécification laisse la traduction jusqu'à la mise en œuvre (fournisseur de compilateur). La réponse est que tous les compilateurs ne traduisent pas C ++ sur C avant la compilation; Certains ne font pas.