|
Cours IDRIS : langage C Support de cours |
Document réalisé à partir des transparents
du cours "Langage C" de l'IDRIS.
Pour une impression correcte, utilisez la version
PostScript.
Langage de programmation développé en 1970 par Dennie Ritchie aux Laboratoires Bell d'AT&T. Il est l'aboutissement de deux langages :
Il fut limité à l'usage interne de Bell jusqu'en 1978 date à laquelle Brian Kernighan et Dennie Ritchie publièrent les spécifications définitives du langage : << The C programming Language >>.
Au milieu des années 1980 la popularité du langage était établie. De nombreux compilateurs ont été écrits, mais comportant quelques incompatibilités portant atteinte à l'objectif de portabilité. Il s'est ensuivi un travail de normalisation effectué par le comité de normalisation X3J11 de l'ANSI qui a abouti en 1988 avec la parution par la suite du manuel : << The C programming Language - 2ème édition >>.
| ! | * | + | \ | " | < |
| # | ( | = | | | { | > |
| % | ) | ~ | ; | ] | / |
| ^ | - | [ | : | , | ? |
| & | _ | } | ' | . | (espace) |
Exemples
| x | y12 | somme_1 | _temperature |
| noms | surface | fin_de_fichier | TABLE |
| 4eme | commence par un chiffre |
| x#y | caractère non autorisé (#) |
| no-commande | caractère non autorisé (-) |
| taux change | caractère non autorisé (espace) |
| auto | extern | sizeof |
| break | float | static |
| case | for | struct |
| char | goto | switch |
| const | if | typedef |
| continue | int | union |
| default | long | unsigned |
| do | register | void |
| double | return | volatile |
| else | short | while |
| enum | signed | |
Exemple :
#include
Cette commande admet plusieurs options telles :
De plus il existe un type ensemble vide : le type void.
Les mots-clés short et long permettent d'influer sur la taille mémoire des entiers et des réels.
Liste des différents types de base
| Syntaxe | Type |
| void | ensemble vide |
| char | caractère |
| short int | entier court |
| int | entier par défaut |
| long int | entier long |
| float | réel simple précision |
| double | réel double précision |
| long double | réel précision étendue |
Remarques
Les deux mots-clés unsigned et signed peuvent
s'appliquer aux types caractère et entier pour indiquer si le bit
de poids fort doit être considéré ou non comme un bit de signe.
Les entiers sont signés par défaut, tandis que les caractères
peuvent l'être ou pas suivant le compilateur utilisé.
Une déclaration telle que unsigned char permettra de désigner
une quantité comprise entre 0 et 255,
tandis que signed char désignera une quantité comprise
entre -128 et +127.
De même unsigned long permettra de désigner une quantité
comprise entre 0 et
232-1, et long
une quantité comprise entre -231 et
231-1.
Exemple
#include <stdio.h>
unsigned char mask;
long val;
main()
{
unsigned int indice;
float x;
double y;
char c;
...
return;
}
double f(double x)
{
unsigned short taille;
int i;
unsigned long temps;
double y;
...
return y;
}
Les énumérations sont des types définissant un ensemble de constantes qui portent un nom que l'on appelle énumérateur. Elles servent à rajouter du sens à de simples numéros, à définir des variables qui ne peuvent prendre leur valeur que dans un ensemble fini de valeurs possibles identifiées par un nom symbolique.
Syntaxe
enum [nom] {
énumérateur1,
énumérateur2,
énumérateur3,
...
énumérateurn
};
Les constantes figurant dans les énumérations ont une valeur entière affectée de façon automatique par le compilateur en partant de 0 par défaut et avec une progression de 1. Les valeurs initiales peuvent être forcées lors de la définition.
enum couleurs {noir, bleu, vert, rouge, blanc,
jaune};
enum couleurs {
noir = -1,
bleu,
vert,
rouge = 5,
blanc,
jaune
};
Dans le 1er exemple, les valeurs générées par le compilateur seront :
| noir | 0 | vert | 2 | blanc | 4 |
| bleu | 1 | rouge | 3 | jaune | 5 |
et dans le 2e :
| noir | -1 | vert | 1 | blanc | 6 |
| bleu | 0 | rouge | 5 | jaune | 7 |
L'adresse d'un objet est indissociable de son type. On pourra se définir par exemple des pointeurs de caractères, des pointeurs d'entiers voire des pointeurs d'objets plus complexes.
L'opération fondamentale effectuée sur les pointeurs est l'indirection, c'est-à-dire l'évaluation de l'objet pointé. Le résultat de cette indirection dépend du type de l'objet pointé.
Par exemple si p_car et p_reel sont respectivement un pointeur de caractères et un pointeur de réel simple précision référençant la même adresse µ, une indirection effectuée sur p_car désignera le caractère situé à l'adresse µ, tandis qu'une indirection effectuée sur p_reel désignera le réel simple précision située à la même adresse.
Bien qu'ayant le même contenu (l'adresse µ), ces deux pointeurs ne sont pas identiques !
< type > < construction > [,< construction >,...];
où type est un type élémentaire (type de base, énumération de constantes) ou un type que l'on s'est défini, et construction est soit un identificateur soit un objet plus complexe construit à l'aide de constructeurs homogènes.
Symboles associés aux constructeurs homogènes
| Symbole | Objet construit |
| * | pointeur |
| [ ] | vecteur |
| ( ) | fonction |
Exemple
char lignes[100];
int *p_entier;
double fonc();
Les déclarations précédentes permettent de définir respectivement :
Ces constructeurs peuvent se combiner entre eux, permettant ainsi de définir des objets encore plus complexes.
Exemple
char *chaines[100];
int mat[100][40];
char **argv;
Le constructeur homogène * est moins prioritaire que
les deux autres.
De ce fait, les déclarations précédentes permettent de définir
respectivement :
L'utilisation de parenthèses permet de modifier la priorité et donc l'ordre d'évaluation.
Exemple
int (*tab)[10];
char (*f)();
char *(*g)();
float *(*tabf[20])();
Cet exemple permet de définir respectivement :
Il en existe 3 :
Les structures permettent de regrouper des objets dont les types peuvent être différents.
Syntaxe
struct [ nom ] {
< liste de déclarations >
};
Les objets regroupés sont les membres ou composantes
de la structure les contenant.
Remarques
Exemple
struct {
char c;
unsigned int i;
float tab[10];
char *p;
MMΰ
==ÏŸ >=
ÿ¯³ Default ²²² ²²²0 ÿÿÿ@ 0 2 A 0 G P 0 R 0 S 0 ¡ „ 0 Š Œ ‡
€?
€? @ö Box01 Aê A¨ 8 ï_F@ê@×ÀWpÂH�„?`I×ÀPpÂR¡ƒ¿ÙQ×ÀKpÂöèEÀPZ×ÀCpÂ"‘�A$NAgÄŸÁ¼µ�? ±ÒÀn% Á;¬Ž¿,ºÒÀ^% Á¢�ÁWýAißÁX Aî;â½óB»nU@
é½-óBë;UÀ,èï½CóB¥ùÁJ¾ö½XóBì;-=16"ÁãoBZµ˜<=6"ÁãoB’6¤»J6"Á
ãoB#Ðê¼V6"Á
ãoBº’F@“²NÁÏ%pÂÞô„?ͶNÁÈ%p¼;ƒ¿
»NÁÃ%pÂ+¶EÀF¿NÁ»%p‰¹�AÆíÁq¯ ÁÙ#�?½TÁwM Á>Ž¿µÁTÁjM Áªy�Á,4íÁs® Á\/ A
â Áp·BËV@åè Á„·BÜ—TÀ»ï Á›·B¡ÐÁ‘ö Á¯·B-a-=ÓX#ÁÕâoBÛÿ˜<áX#ÁÕâoBŽ£»ìX#ÁÕâoB¢…ê¼úX#ÁÕâoBÝpF@¦ÁpÂ%±„?ºªÁxpÂuƒ¿ö®Ásp ØEÀ2³ÁkpÂÄtVÀá-
Áª2 ÁùëÁ0ÙÀvßBM·ê¼7—"ÁøâoB<Ó£»+—"ÁùâoB0Θ<—"ÁùâoBWH-=—"ÁùâoB AÞØÀ5ßB:W@
ÁÔ2 ÁÌ�F@ˆ¬-Á§pÂÓ„?İ-Á p˜]ƒ¿þ´-Á›pÂÇEÀ;¹-Á“pÂkbVÀú0Á@ ÁMÞÁ•BWÁ“ËBwžê¼ø"ÁçâoBåo£»ø"ÁçâoBç˜<