Bonjour,
J'ai lu l'article de wikipedia sur le C++ et je me demandais si il était écrit en C du fait qu'il est un niveau au dessus du C.
Version imprimable
Bonjour,
J'ai lu l'article de wikipedia sur le C++ et je me demandais si il était écrit en C du fait qu'il est un niveau au dessus du C.
Le C++ c'est juste une norme, une suite de phrases du genre "Si tu tapes ca, ca doit faire ca". Cette norme inclut le C comme un sous ensemble, ce qui veut dire que tout code C doit marcher avec un compilateur C++ comme avec un compilateur C.
Je pense que ta question portait plus sur le compilateur. g++ est fait en un mélange de C et C++ je crois, visual studio je sais pas. Mais ca a peu d'importance, tu peux faire un compilateur C++ en BASIC ou en COBOL si tu as envie. L'important c'est que le langage que tu utilises soit capable de prendre un fichier texte (le code source) en entrée, de le traiter, et de sortir un fichier binaire (exécutable) en sortie.
Le C++ ne regroupe pas le C comme un sous ensemble, il existe beaucoup de différences qui empêcheront un code C de compiler en C++.
Un exemple :
Ce code compile en C mais pas en C++, en C les conversions de void* vers un autre type de pointeurs est implicite (comme si void* était un super-type qui regroupe tous les pointeurs), en C++ tu es obligé de faire une conversion explicite :Code:
1
2 void* ptr; int* intptr = ptr; //compile en C mais pas en C++
C'est une erreur courante quand il y a des malloc en C et qu'on compile en C++ :Code:
1
2 void* ptr; int* intptr = (int * ) ptr;// compile en C et en C++
On doit "forcer" la conversionCode:int* intptr = malloc(sizeof(int) * 20); //compile en C mais pas en C++
C'est une différence majeur et il en existe d'autres.Code:int* intptr = (int *)malloc(sizeof(int) * 20); //compile en C et en C++
Donc non, C++ != C
Pour compléter les réponses ci dessus, un peu d'histoire:
La première implémentation de C++ était écrite en C, à coup de macro. Si je me souviens bien c'était CFront. Quelques années après, de vrai compilateurs C++ sont apparus mais je ne sais pas si ils étaient d'abord implémenté en C ou directement avec CFront en C++.
Salut,
En fait, on peut écrire un compilateur pour n'importe quel langage depuis n'importe quel autre langage...
Les premiers compilateur Ada, C, COBOL ou fortran ont de fortes chances d'avoir été écrit... en assembleur (ou avec un des langages qui existaient déjà au moment de leur création ;)), pour une cible donnée
L'étape suivante consiste souvent à coder un compilateur dans le nouveau langage et à essayer de le compiler, pour la meme cible, avec le compilateur que l'on a créé dans un autre langage.
Cela permet plus ou moins de s'assurer que l'on a pris tout ce qu'il fallait en compte.
C'est la raison pour laquelle la collection Gcc est compilée trois fois lorsque tu fais la compilation toi-même (edit : à ceci près que quasiment toute la collection est codée en C ;)):
Il ne faut pas oublier qu'au final, un exécutable est un ensemble de 0 et de 1 qui sera compréhensible par le processeur, et que c'est cela qui compte :D
- La première compilation permet d'avoir un compilateur capable de générer des exécutables pour la cible données
- La deuxième compilation (effectuée au départ du compilateur obtenu par la première) permet d'obtenir un compilateur fonctionnant sur la cible donnée
- la troisième compilation (effectuée au départ du compilateur obtenu par la deuxième compilation) sert de "controle": en comparant les fichiers obtenus lors de la deuxième compilation avec ceux obtenus lors de la troisième, on doit obtenir (aux timestamp près) les même fichiers ;)
Merci pour ces précisions. :P