Langage C/C++ Valid XHTML 1.1Cette page est conforme à la norme CSS!Mise à jour 03-2002
SOMMAIRE

Présentation
    Préambule
    Méthode de programmation
Les exemples détaillés
Les outils et liens
Télécharger les exemples
PRESENTATIONRetour en haut de page

Préambule

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 :
  • beaucoup de fonctions n'existent pas en tant qu'instructions natives mais doivent être inclues à partir d'autres sources ou librairies. La grande diversité de fonctions disponibles ne facilite pas le choix.
  • une autre difficulté réside dans le typage des données et de fonctions : un nombre entier n'est pas un nombre flottant; si une fonction demande un flottant en paramètre, un nombre entier devra auparavant être converti dans ce format.
  • il faut contrôler par programme les attributions (allocations) et récupération d'espace mémoire, sous peine de saturation du système au bout d'un moment. C'est la contrepartie du contrôle fin que l'on peut avoir sur l'utilisation mémoire (par exemple extension des tableaux au fur et à mesure des besoins).
Malgré ces difficultés qui peuvent rebuter un débutant, mais grâce à sa proximité du langage machine, C permet d'aborder tous les domaines : écriture de systèmes d'exploitation, logiciels temps réel grâce à sa vélocité et compacité du code produit, logiciels de gestion, ...

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.

Programmation

Structure d'un programme

Un programme C possède la structure suivante

#include "stdio.h" inclusion de fichiers externes de fonctions existantes
stdio donne les fonctions claviers et écran
int variable; définition des variables globales du programme
main(int argc, char *params[]) la fonction main est obligatoire dans tout programme
Ici, elle reçoit deux paramètres : le nombre de paramètres et un pointeur sur la valeur des paramètres.
{ marque le début du corps de la fonction
} marque la fin du corps de la fonction

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).

printf("Bonjour"); Affiche le mot "Bonjour" à l'emplacement courant du curseur
printf("Bonjour %s %s. Comment va ?",prenom, nom); Affiche un message d'accueil formaté (en incluant des variables) à l'attention de la personne designée par prenom et nom

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 :
  • recréer le fichier .o en cas de modification d'un des fichiers .c
  • recréer le fichier éxécutable en cas de modification d'un des fichiers .o
Toutes les actions sont enchainées, c'est-à-dire que la modification d'une source entraine la compilation du programme objet qui à son tour déclenche la compilation de l'éxécutable.

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 :
  • fichiers .cpp au lieu de .c,
  • le type des fonctions doit être défini (int, long, ... ou void = pas de valeur de retour),
  • les affichages s'effectuent par cout << au lieu de printf

LES EXEMPLES DETAILLESRetour en haut de page

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.

Quelle heure est-il ? (qh.c)

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.

Jeu des cases (jeucases.c et jeucases.h)

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 :
  • effacement écran,
  • positionnement ligne/colonne,
  • couleurs caractère et fond

Jeu des cases en C++ (jeucases.cpp et jeucases.cls)

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.

LES OUTILS ET LIENSRetour en haut de page

Compilateur

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.