| Langage C/C++ | Mise à jour 03-2002 |
|
C est un langage évolué, le plus proche du langage machine ou de l'assembleur. De ce fait, il est très performant en éxécution. En outre, il offre des mécanismes puissants mais difficiles à comprendre et exploiter correctement (les fameux pointeurs notamment). La complexité vient pour l'essentiel de trois causes :
Un mot sur C++ Comme son nom l'indique, C++ apporte des fonctionnalités supplémentaires à C : l'approche objet. Le but ici n'est pas de faire une présentation de la programmation objet mais on peut en dire quelques mots. La syntaxe utilisée est identique, la différence tient à l'organisation des données (les variables, nommées propriétés) et des fonctions (procédures, nommées méthodes) qui sont regroupées à l'intérieur d'un objet. Cet objet est le seul moyen d'accès aux données et méthodes : c'est ce qu'on appelle l'encapsulation. D'autre part, un objet peut toujours être dérivé d'un autre, plus générique (exemple classique : un véhicule a un volant et des roues; une voiture ou un camion sont des véhicules avec des caractéristiques (propriétés) spécifiques). Cette faculté de dérivation s'appelle l'héritage.
Structure d'un programme Un programme C possède la structure suivante
Chaque ligne se termine par le caractère ;. Les commentaires sont précédés des caractères //. La fonction main peut faire appel à d'autres fonctions qui sont alors décrites à la suite. Principales fonctionnalités La fonction printf printf permet d'afficher des données sur l'écran. Sa syntaxe est similaire à son équivalent dans d'autres langages (perl ou awk).
Le positionnement du curseur à l'endroit voulu et le choix des couleurs des caractères sont réalisés en envoyant directement les séquences ascii adéquates. Les pointeurs Un pointeur donne l'adresse en mémoire d'une variable; on le reconnait à son préfixe *. Ainsi mavar donne la valeur de la variable mavar, alors que *mavar donne son adresse mémoire. La difficulté vient de la confusion fréquente entre les deux syntaxes. Pour imaginer la puissance des pointeurs : les pointeurs permettent d'adresser des tableaux, et l'on peut réaliser des tableaux de pointeurs ... Compilation d'un programme Une source (fichier d'extension .c ) est compilée sous forme d'un programme objet ( d'extension .o). Ensuite différents programmes objets sont regroupés en un fichier éxécutable. Un programme simple peut être créé en une seule fois; à l'inverse, un projet complexe est composé de plusieurs fichiers objets. A chaque modification d'une source, le fichier objet correspondant doit être recréé puis l'éxécutable reconstitué. A la longue, les manipulations nécessaires peuvent engendrer des erreurs ou omissions, d'autant que les options de compilation sont fort nombreuses. Afin de faciliter la compilation des projets, la commande make associée à un fichier de paramètres de compilation (le makefile) automatise les recompilations. Makefile On définit ici les dépendances entre les différents fichiers constituant le projet et les actions à entreprendre en cas de modification d'un des constituants :
0utre la fonction de compilation, on peut inclure dans le makefile des fonctions annexes de gestion (création du programme d'installation, purge des fichiers de travail, etc...) Programme C++ Un programme C est aussi un programme C++. L'intérêt du C++ tient à la programmation objet. L'édition et la compilation d'un programme restent identiques. Certaines différences apparaissent ci-dessous :
|
Les exemples présentés ci-dessous sont très simples et n'exploitent qu'une infime partie des possibilités du langage. Cependant ils permettent d'aborder les variables et leur portée, les fonctions, les (effrayants) pointeurs et les fichiers. La compilation est réalisée à travers un makefile simple lui aussi.
Le programme a pour but d'afficher l'heure en gros caractères (style afficheur 7 segments des calculatrices) dans l'écran de commande. Il reçoit en paramètre une chaîne représentant l'heure.
Le programme constitue un jeu dans lequel il s'agit d'inverser la couleur de 9 cases jusqu'à obtenir une configuration donnée. Il reçoit en paramètres l'heure et le nom de l'utilisateur pour enregistrer à la fin le score dans un fichier texte. Il exploite les séquences de caractères ascii pour afficher à l'écran :
Il s'agit de la version C++ du jeu précédent. Le but est de montrer l'utilisation des classes en place de la classique programmation procédurale. Le traitement des cases (création, affichage, inversion) est réalisé par une classe. Le reste des fonctions est identique au programme C. |
Le compilateur gcc est fourni avec chaque distribution de Linux puisqu'il est souvent nécessaire pour réaliser des installations de logiciels. Le compilateur g++ est également fourni et fait l'objet d'un package différent à charger séparément. |