Vous êtes ici : Accueil > Cours S SI > Le langage C
Publié : 7 décembre 2008

Le langage C

LE LANGAGE C

 

 1- Historique

 

Le langage C a vu le jour au début des années 1970 aux Bell Laboratories (AT&T) en parallèle avec le système d’exploitation UNIX. Le langage C a été défini dans l’ouvrage THE C PROGRAMMING LANGUAGE de Brian W. Kernighan et Dennis M. Ritchie.
Il est aujourd’hui normalisé (1989) ce qui assure une grande portabilité aux logiciels écrits dans ce langage. Le langage C normalisé est qualifié du sigle de C-ANSI (American National Standards Institute). Le langage C est un langage de programmation évolué, a priori indépendant de la structure des ordinateurs, mais permettant d’accéder à toutes les ressources d’une machine.
Il existe une évolution très importante du langage C, c’est le langage C++ qui emprunte presque tout au langage C, en particulier sa syntaxe, mais en lui rajoutant de nombreuses possibilités en termes de programmation orientée objet.


 2- Du fichier source au fichier exécutable

Un programme écrit en langage C se présente généralement sous forme d’une ou plusieurs fonctions juxtaposées dans un fichier. C’est le fichier source saisi à l’aide d’un éditeur de texte, auquel on donne l’extension .c, exemple : essai.c. Ce dernier est traité par le compilateur qui génère un fichier objet, reconnaissable à son extension .obj.
Pour obtenir un fichier exécutable, il faut ensuite relier les différents fichiers objets nécessaires à l’aide d’un éditeur de liens (linker). Certaines fonctions appelées peuvent être regroupées dans des librairies ou fichiers objets.

Désignation des fichiers dans environnement AVR

*.c fichier source
*.obj fichier objet
*.h fichier entête
*.lib fichier librairie
*.hex fichier exécutable (Intel)

Fichiers nécessaires à la programmation ISP : *.rom, *.eep
Fichiers nécessaires à la fonction debugger : *.cof, *.rom, *.eep
Environnement DOS
*.c fichier source
*.obj fichier objet
*.h fichier entête
*.lib fichier librairie
*.exe fichier exécutable

Environnement UNIX
*.c fichier source
*.o fichier objet
*.h fichier entête
*.a fichier librairie
* fichier exécutable

 3- Exemple de programme : allumer les leds du port B

 

 4- Descriptions des éléments d’un programme

Les directives de pré-compilation :
Le rôle du pré-processeur ou pré-compilateur, est de réaliser des mise en forme et des aménagement de texte d’un fichier source, juste avant qu’il ne soit traité par le compilateur. Les instructions spécifiques pour indiquer quelles opérations effectuer durant cette étape de pré-compilation sont appelées directives. Elles commencent toutes par le caractère # et ne se terminent pas par un point-virgule.

La déclaration des variables :
Tous les éléments utilisés doivent faire l’objet d’une définition préalable.

Les fonctions :
En langage C, le seul type de sous-programme disponible est le type fonction. Toutes les fonctions sont externes les unes par rapport aux autres. L’ensemble des instructions composant une fonction sont groupées entre accolades et . On dit que ces deux accolades ouvrante et fermante délimitent un bloc.
A priori, une fonction retourne obligatoirement une valeur et une seule. C’est l’instruction return qui permet de préciser quelle valeur doit être retournée. Il est possible de préciser explicitement qu’une fonction ne retourne aucune valeur à l’aide du mot clé void.
Parmi toutes les fonctions, une et une seule, doit obligatoirement porter le nom main ; il s’agit de la fonction principale (en général à la fin du programme) par laquelle débute l’exécution.

Les commentaires :
Toute séquence de caractères délimitée à l’aide de /* et */ est considérée comme un commentaire (également //).

 

 5- Les données dans un programme

Les types de données :

Les bases de représentation :

Les constantes :
Les constantes sont stockées en mémoire flash. On utilise l’attribut const pour en définir une.
Exemples :
const int integer_constant=1234+5 ;
const char char_constant=’a’ ;
const int integer_array2[10]=1,2 ;


Il est possible, à l’aide d’un suffixe, d’affecter à une valeur son type de donnée.

Les variables :
Syntaxe : <type> <identifiant> ;
Exemples :
char a ;
int b ;
Les tableaux :
Exemple 1 : tableau de valeurs
unsigned char Table[5]=1,2,3,4,5 ;

permet de créer un tableau (Table) contenant 5 données. Pour lire ce tableau il suffira de faire varier l’indice repérant la donnée à exploiter (ex : a = Table[i]).

Exemple 2 : tableau de caractère ou chaîne de caractères
char Phrase[] = "hello world !" ;

Le type de tableau crée ici est en fait une chaîne de caractère. Le compilateur réserve ici un tableau de 14 octets, 13 pour hello world ! et 1 pour le caractère de fin de chaîne (caractère nul de code ASCII zéro).



Les pointeurs :
Au lieu de travailler avec les noms des variables, il est également possible de travailler avec leurs adresses en mémoire. Tel est le but des pointeurs. Un pointeur est une variable qui contient l’adresse d’une autre variable.

 6- Les opérateurs

Les opérateurs arithmétiques :

Les opérateurs arithmétiques raccourcis :

Les opérateurs logiques (sur entiers uniquement) :

 Les opérateurs de comparaison :

Ces opérateurs renvoient la valeur "1" si la condition vérifiée est vraie.

 7- Les boucles et branchements multiples

 

 

 8- Directives de pré-compilation

#include <90S8515.h> Cette directive permet d’inclure au programme en cours le fichier de configuration des registres du composant AT90S8515. Dans le cas ou un composant de type AT90S8535 est employé il suffit d’employer le fichier 90S8535.h . Ces fichiers se trouvent dans le répertoire cavr\inc
#define Cette directive permet de créer des "macros instructions".
Exemples : #define ALFA 0xff : Cette commande permet l’attribution de la valeur "0xff" au symbole "ALFA". Lors de la pré-compilation tous les symboles ALPHA rencontrés seront remplacés par la valeur 0xff

 Cours issue de la formation atmel et du lycée de Pons

Documents joints