C
C est un langage de programmation impératif conçu pour la programmation système. Inventé au début des années 1970 avec UNIX, C est devenu l’une des langues les plus utilisées. Beaucoup de langues modernes comme C, Java et PHP répéter aspects de C.
Sources dans l’exécutable
Génération d’un exécutable à partir de fichiers source se fait en plusieurs étapes, qui sont souvent automatisées à l’aide d’outils tels que:
Précompilation
Au cours de cette étape, le préprocesseur effectue plusieurs opérations sur les fichiers source, y compris les instructions (les directives du préprocesseur) sont dans ces fichiers. Le préprocesseur génère ensuite les fichiers intermédiaires pour chaque fichier source (qui ont généralement l’extension ‘. C ‘), pour utilisation dans l’étape suivante.
Le préprocesseur effectue une substitution de texte, les inclusions de fichiers (généralement fichier d’entête contenant diverses déclarations) avec la possibilité d’effectuer certaines opérations que si certaines conditions sont met.It également au cours de ce stade que les commentaires sont supprimés.
Compilation
La phase de compilation se compose généralement de générer le code assembleur (toujours lisible par un être humain, mais en fonction du processeur). Pour chaque fichier source, vous obtenez un fichier en langage assembleur.
Par abus de langage est appelée compilation toute la phase de génération d’un exécutable à partir de fichiers source. Mais ce n’est que l’une des étapes menant à la création d’un exécutable.
Certains compilateurs C fonctionnent à ce niveau en deux phases, la première génération d’un fichier compilé dans un langage intermédiaire pour un idéal de la machine virtuelle (voir P-Code) portable d’une plateforme à une autre, la conversion de la langue seconde langue intermédiaire d’assemblage en fonction du processeur sur la plate-forme cible.
D’autres compilateurs C ne peut pas générer langage d’assemblage, mais seulement à la compilation de langage intermédiaire, qui sera automatiquement interprété ou compilé en code natif en cours d’exécution sur la machine cible (une machine virtuelle qui sera liée au programme final).
Assemblée
Cette étape implique la génération d’un fichier objet pour chaque fichier dans le code assembleur. Ces sont des fichiers objet en langage machine. Il s’agit d’un format binaire, en fonction du processeur. Les objets sont généralement les fichiers ‘. O ‘sous Unix ou Linux, ou’. ‘Obj’ avec les outils de développement pour les plates-formes Microsoft, Intel, Digital, IBM DOS, Windows, VMS, CP / M, où … extensions se présentent généralement sous la forme de trois caractères.
Cette phase est parfois regroupés avec la précédente (en mettant en place un flux de fichiers de données internes sans passer par le langage intermédiaire ou langage d’assemblage), auquel cas le compilateur génère un fichier objet directement binaire.
Pour les compilateurs qui génèrent du code intermédiaire, la phase d’assemblage peut également être complètement supprimées: la machine virtuelle (liée au programme final, ou utilisé séparément comme un programme d’alimentation pour fonctionner sur une machine virtuelle partagée et optimisée sur la machine hôte) à accomplir ou de compiler cette langue en code machine natif directement sur la machine hôte. Dans ce cas, la machine virtuelle qui interprète le langage intermédiaire et le compile en code natif optimisé pour la machine hôte peut être un composant du système d’exploitation ou une bibliothèque partagée est installée, et cette machine virtuelle ne sera pas même pas inclus dans le finale concernant le programme disponible.
Lier
L’éditeur de liens est la dernière étape et vise à rassembler tous les éléments d’un programme. Les fichiers objets différents sont ensuite combinés, et les bibliothèques statiques, afin de produire un fichier exécutable.
Le but de liaison est de sélectionner des éléments de code présent dans un ensemble utile de code compilé et des bibliothèques, et résoudre les références mutuelle entre ces différents éléments pour leur permettre d’être renvoyé directement à l’exécution du programme.
L’éditeur de liens peut également se produire avec le compilateur génère langage intermédiaire pour générer un fichier unique langage facilement installable par lequel toutes les références sont résolus.
Mais même cette dernière phase de lier langage intermédiaire est parfois supprimé, il a ensuite réalisé que lorsque le programme est chargé directement par l’hôte de la machine virtuelle. Dans ce cas, il est le plus souvent remplacé par la création d’un package (y compris les fichiers objets différents en une seule bibliothèque ou d’archives, et l’inclusion éventuelle dans cette archive un petit fichier de directives pour décrire ce fichier de langage intermédiaire doit être utilisé en premier par le machine virtuelle pour lancer le programme).
Nous pouvons voir maintenant le goût pour les machines virtuelles, en raison de la grande variété de systèmes d’accueil et de l’évolution technologique très rapide de ces derniers, parce qu’il facilite le déploiement de programmes, de sorte que le programmeur n’a plus besoin de générer de nombreux programmes exécutables que les types de cibles systèmes.
Exemples
Voici quelques exemples très brièvement quelques propriétés de C. Pour plus d’informations, voir le wikilivre ‘Programmation C’.
Cordes
L’idée est de copier des caractères jusqu’à ce que nous copier le NUL, qui marque traditionnellement la fin d’une chaîne en C. La bibliothèque offre une fonction standard C strcpy similaires, dont le prototype est char * strcpy (char *, const char *).
La boucle while utilise une notation standard, mais très brièvement autorisé par C, qui a contribué à lui donner la réputation d’être un langage très lisible. L’expression * s * t = copie d’un personnage, renvoie sa valeur, et les augmentations de pointeurs s et boucle t.This n’a pas de corps, car toutes les opérations sont effectuées dans l’expression de test tout. Nous considérons qu’il est nécessaire de contrôler ce type de notation pour contrôler C.
L’allocation de mémoire
Int_list structure représente un élément d’une liste chaînée contenant des données de type int. Les deux fonctions qui suivent (et remove_next insert_next) sont utilisés pour ajouter et supprimer un élément de la liste.
Dans cet exemple, les deux fonctions de base sont malloc et free.Le premier est utilisé pour allouer de la mémoire, il reçoit le paramètre est le nombre d’octets qui doit être alloué et renvoie l’adresse du premier octet qui a été attribué, sinon il retourne NULL. est libre de libérer de la mémoire qui a été allouée par malloc.
Optimiseurs
Des tests de comparaison entre C et assembleur menées depuis 1990 montrent sur les machines RISC, alors tout-en-fait, les inconvénients intuitive, un net avantage lorsque toutes les options d’optimisation du compilateur C sont enabled.Optimizers construire un graphe avec effet chromatique qui leur permet de répartir l’utilisation sans enregistrements d’erreur dans une quasi-optimale, où un programmeur serait vite perdu. Ils comprennent des instructions plus directe en réorganisant les charge et enregistre les dossiers de bénéficier de l’effet pipeline. La même opération effectuée sur un programme source est faisable, mais il serait presque impossible alors de maintenir.
En revanche, les optimiseurs ont moins de latitude dans la réorganisation des instructi
ons CISC, plus complexe, et dans ce cas les résultats sont moins clairs.
Evolution de la langue
Le langage C est apparu au cours de l’année 1972 chez Bell Laboratories. Il a été développé en collaboration avec UNIX par Dennis Ritchie et Ken Thompson.Ken Thompson avait développé un prédécesseur de C, le langage B, qui est elle-même inspirée par BCPL. Dennis Ritchie a changé la langue B dans une nouvelle version assez différente pour qu’elle soit appelée C. Par la suite, Brian Kernighan contribué à populariser l’language.He également procédé à quelques changements de dernière minute. En 1978, il a été un des principaux auteurs du livre The C Programming Language décrivant le langage enfin stabilisé; Ritchie avait occupé des appendices et des exemples avec Unix. Nous parlons encore de CK