Académique Documents
Professionnel Documents
Culture Documents
Langage C
2009 2010
Equipe pédagogique:
Florence Cloppet
Neilze Dorta
David Janiszek
prenom.nom@math-info.univ-paris5.fr
prenom.nom@mi.parisdescartes.fr
Sommaire
1. Informations administratives
2. Introduction
3. Programmer en Langage C
4. Notions de Langage C
1. Variables , Constantes
2. Opérateurs
3. Fonctions
4. Pointeurs
5. Tableaux
6. Tableaux de caractères – chaîne de caractères
7. Synthèse Tableaux - Pointeurs / Tableau de Pointeurs
8. Structures – Unions – Énumérations
9. Fichiers
10. Pré-processeur
11. Compilation séparée
12. Intégration d’un programme C dans l’environnement hôte
UE programmation 3 – F. Cloppet 2
Informations Administratives (1)
Emploi du Temps
Cours lundi 13h00-14h30 amphi Giroud
groupe 5
lundi 8h30-10h et 10h15-12h15 : D. Janizsek
groupe 8
mardi 10h15-11h45 et 12h45-14h45 : F. Cloppet
groupe 4
jeudi 12h30-14h00 et 14h15-16h15 : N. Dorta
groupe 6
jeudi 14h30-16h00 et 16h30-18h30 : D. Janizsek
UE programmation 3 – F. Cloppet 3
Informations Administratives (2)
UE programmation 3 – F. Cloppet 4
Bibliographie
La Bible ….
Le langage C Norme ANSI , Brian W. Kernighan et
Dennis M. Ritchie, Dunod 2ème Edition (2004)
UE programmation 3 – F. Cloppet 5
Remarque
UE programmation 3 – F. Cloppet 6
Introduction / Notions de base (1)
Un ordinateur permet :
la saisie d’informations ,
le traitement des informations saisies ,
le stockage des informations et des résultats des traitements ,
la visualisation des résultats.
Disque Dur
UE programmation 3 – F. Cloppet 7
Introduction / Notions de base (2)
UE programmation 3 – F. Cloppet 8
Introduction / Activité de programmation (1)
Étudier le problème à résoudre
solution programmable ?
UE programmation 3 – F. Cloppet 9
Introduction / Activité de programmation (2)
Aspects de conception liés aux problèmes Aspects de conception liés
impliquant le monde réel à la conception elle-même
conception
initiale
Modèles abstraits
du système
améliorations
successives
conception
finale
livraison
Modèle final
Solution
(code source)
UE programmation 3 – F. Cloppet 11
Programmer en Langage C (1)
Réflexion (PHASE PRIMORDIALE)
UE programmation 3 – F. Cloppet 12
Programmer en Langage C (2)
Compilation (3 étapes)
phase de pré-processing des
fichiers *.c
fic1.c fic1.h fic2.c fic2.h
cc -c fic1.c cc -c fic2.c
fic1.o fic2.o
cc fic1.o fic2.o -o toto
UE programmation 3 – F. Cloppet 13
Programmer en Langage C / Illustration par
l’exemple
Algorithme :
Calculer puis afficher le carré de 0
Calculer puis afficher le carré de 1
..........
Calculer puis afficher le carré de 8
Calculer puis afficher le carré de 9
UE programmation 3 – F. Cloppet 15
Programmer en Langage C / Programme ? (2)
Programme :
Le carré de 0 est 0
#include <stdio.h> Le carré de 1 est 1
void main() Le carré de 2 est 4
{ Le carré de 3 est 9
printf("Le carré de 0 est %d\n", 0*0); Le carré de 4 est 16
Le carré de 5 est 25
printf("Le carré de 1 est %d\n", 1*1); Le carré de 6 est 36
Le carré de 7 est 49
…… etc………
Le carré de 8 est 64
printf("Le carré de 8 est %d\n", 8*8);
Le carré de 9 est 81
printf("Le carré de 9 est %d\n", 9*9);
}
UE programmation 3 – F. Cloppet 16
Programmer en Langage C / Programme ? (3)
#include <stdio.h> On demande d'inclure la librairie stdio.h.
#define NBFOIS 10 définition de la constante symbolique NBFOIS = 10
UE programmation 3 – F. Cloppet 17
Programmer en Langage C /Structure d’un programme C
monfichier.c
#include <fichier d'entête> Directives de compilation
#define constante valeur du préprocesseur
typedef struct duo { Définitions des types
int a, b;
}tduo;
Définitions des fonctions
extern int VarGlobaleExt; et variables externes
typefct1 fonction1(int, char);
typefct2 fonction2(int, int); Paramétrage des fonctions internes
typefct2 fonction2(int a, b)
{
Définitions des fonctions
return(variable2);
}
void main()
{
int a, b;
Définition de la fonction main et
a = fonction1(2,'a'); appel d'autres fonctions.
b = fonction2(2,3);
}
UE programmation 3 – F. Cloppet 18
Notions Langage C
Identificateurs
lettres ou lettres et chiffres ( taille < 31)
pas de caractères d’espacement
C fait la différence entre majuscule et Minuscule (toto est différent de
Toto)
donner des noms qui indiquent le rôle de la variable ou de la fonction
Mots clés et opérateurs réservés
Variables
stocker des valeurs numériques qui peuvent changer
type
définition / déclaration
Initialisation
UE programmation 3 – F. Cloppet 19
Notions Langage C / Variables (1)
Type d’une variable = défini suivant le type de valeurs qu’elle peut
prendre
UE programmation 3 – F. Cloppet 20
Notions Langage C / Variables (2)
float => réels (4 octets)
UE programmation 3 – F. Cloppet 21
Notions Langage C / Variables (3)
Exemple:
int A; => A est une variable de type entier
=> A représente le contenu d’un emplacement mémoire
=> l ’emplacement mémoire ( = adresse mémoire) qui
comporte la valeur de la variable A est obtenu par &A
&A
……..
OXf1 OXf2 OXf3
UE programmation 3 – F. Cloppet 22
Notions Langage C / Variables (4)
Où et quand déclarer les variables ?
En dehors du corps des fonctions
Dans le corps d’une fonction
En début d’un bloc
Dans tous les cas, AVANT de les utiliser
Visibilité des Variables
variables déclarées en dehors de toute fonction = variables globales
=> visibles dans toutes les fonctions du fichier où elles sont
déclarées
variables déclarées dans un bloc = variables locales ou variables
automatiques
=> visibles uniquement dans le bloc où elles sont déclarées et
dans les sous-blocs de celui-ci
Une variable locale qui a le même nom qu’une variable globale
masque la variable globale dans la zone de visibilité de la
variable locale
UE programmation 3 – F. Cloppet 23
Notions Langage C / Variables (5)
Durée de vie des variables
locales : variable est allouée à chaque entrée dans le bloc et elle est
détruite à la sortie du bloc (=> perte de sa valeur)
Initialisation
initialiser une variable = lui affecter une valeur initiale
=> peut se faire en même temps que sa déclaration
UE programmation 3 – F. Cloppet 24
Notions Langage C / Variables (6)
Classes particulières de variables
static :
variable globale : variable sera invisible dans les autres fichiers
variable locale à une fonction: la variable n’est pas détruite à la fin de l ’appel
de la fonction
UE programmation 3 – F. Cloppet 25
Notions Langage C / Variables (7)
UE programmation 3 – F. Cloppet 27
Notions Langage C/ Opérateurs (1)
Opérateurs à 1, 2 ou 3 opérandes : unaires, binaires,
ternaires
* et / sont prioritaires
UE programmation 3 – F. Cloppet 28
Notions Langage C / Opérateurs (2)
UE programmation 3 – F. Cloppet 29
Notions Langage C / Opérateurs (3)
Opérateur d’incrémentation unaire
var++;
++var;
UE programmation 3 – F. Cloppet 30
Notions Langage C / Opérateurs (4)
Opérateurs logiques : A
V V F F
&& (ET logique), B V F V F
|| (OU logique)
A && B V F F F
A || B
V V V F
UE programmation 3 – F. Cloppet 31
Notions Langage C / Opérateurs (5)
Opérateurs binaires de traitement des bits : s’appliquent sur des entiers
et des caractères
& (ET): réalise un ET logique sur chacun des bits des 2 opérandes
27 26 25 24 23 22 21 20
ex : 6 0 0 0 0 0 1 1 0
&
10 0 0 0 0 1 0 1 0
2 0 0 0 0 0 0 1 0
UE programmation 3 – F. Cloppet 32
Notions Langage C / Opérateurs (6)
| (OU inclusif): réalise un OU logique sur chacun des bits des 2
opérandes
27 26 25 24 23 22 21 20
ex : 1 0 0 0 0 0 0 0 1
|
121 0 1 1 1 1 0 0 1
121 0 1 1 1 1 0 0 1
UE programmation 3 – F. Cloppet 33
Notions Langage C / Opérateurs (7)
^ (OU exclusif): met à 0 tous les bits qui sont identiques dans op1 et
op2, et à 1 ceux qui diffèrent
27 26 25 24 23 22 21 20
ex : 1 0 0 0 0 0 0 0 1
^
121 0 1 1 1 1 0 0 1
120 0 1 1 1 1 0 0 0
27 26 25 24 23 22 21 20
ex : 8 0 0 0 0 1 0 0 0
8>>2 0 0 0 0 0 0 1 0 ( = 8 /4)
~ : donne le complément à un d’une opérande de type entier (inversion
de tous les bits).
27 26 25 24 23 22 21 20
ex : 28 0 0 0 1 1 1 0 0
~28 1 1 1 0 0 0 1 1 (= 227)
UE programmation 3 – F. Cloppet 35
Notions Langage C / Opérateurs (9)
( ), [], ->, .
+ prioritaire
~, ++, --, (signe +/-), *(adresse), &, sizeof(var)
*, /, %
+, -
<<, >>
< <=, > >=
= =, !=
&
^
|
&&
||
?:
- prioritaire tous les combinés
UE programmation 3 – F. Cloppet 36
Notions Langage C / Structures de Contrôle (1)
UE programmation 3 – F. Cloppet 37
Notions Langage C / Structures de Contrôle (2)
les if - else peuvent s’enchaîner
if(valeur == 0)
Calculer1(0) ;
else if (valeur == 1){
Calculer2(1) ;
Calculer3(1) ;
}else if (valeur == 3)
printf("La valeur est 3\n ") ;
else
printf("Valeur trop grande\n ") ;
Opérateur ternaire ?
Var = test ? Valeur_Var si test vrai : Valeur_Var si test faux ;
UE programmation 3 – F. Cloppet 38
Notions Langage C / Structures de Contrôle (3)
prises de décision à choix multiples : switch
au cas où la valeur est égale à 2 ou à 4 afficher " + ",
au cas où la valeur est égale à -2 ou à -4 afficher " - " ,
au cas où la valeur est égale à 0 afficher "valeur nulle ",
sinon afficher "mauvaise valeur "
UE programmation 3 – F. Cloppet 39
Notions Langage C / Structures de Contrôle (4)
Répéter une suite d’instructions
while
while(condition_vraie){
instructions ;
}
for
for(initialisation ; condition ; instructions d’incrémentation){
instructions ;
}
UE programmation 3 – F. Cloppet 40
Notions Langage C / Structures de Contrôle (5)
do-while
do{
instructions
}while(condition_vraie) ;
UE programmation 3 – F. Cloppet 41
Langage C / Les Fonctions
la même instruction ou même suite d’instructions est
utilisée plusieurs fois dans un programme
#include <stdio.h>
void main(){
int x, y, z, w, minimum;
UE programmation 3 – F. Cloppet 43
Fonctions / Généralités (2)
FONCTION
VALEUR
DE
PARAMETRES TRAITEMENT RETOUR
UE programmation 3 – F. Cloppet 44
Fonctions / Déclaration (1)
Déclaration d’une fonction en norme ANSI
Valeur de retour
UE programmation 3 – F. Cloppet 46
Fonctions / Appel (1)
appel de fonction
Une fonction doit être définie avant d’être appelée ou alors elle doit
être prototypée en début de fichier
UE programmation 3 – F. Cloppet 48
Fonctions / Appel (3) – Illustration par l’exemple
#include <stdio.h>
void Somme ( int A, int B){ /* déclaration de la fonction Somme */
int C ;
C=A+B;
printf(" Le résultat de %d + %d est %d.\n ", A, B, C) ;
return ;
}
int main( ){
int AA, BB ;
printf(" Rentrer deux nombres : " ) ;
scanf(" %d %d ", &AA, &BB) ;
Somme(AA, BB) ; /* Appel de la Fonction Somme */
return(1);
UE programmation 3 – F. Cloppet 49
}
Fonctions / Paramètres formels et effectifs (1)
paramètre formel => apparaît dans la définition de la fonction
UE programmation 3 – F. Cloppet 50
Fonctions / Paramètres formels et effectifs (2)
/* déclaration de la fonction Min */
int Min (int a, int b){
return(a<b ? a : b);
}
/* de même */
u=8; v=9;
printf("%d\n",Min(u, v));
UE programmation 3 – F. Cloppet 51
Fonctions / Paramètres formels et effectifs (3)
RAPPELS
Variable Locale / Globale
Variable Globale
allocation de cette variable par le compilateur dans un segment
permanent de données
UE programmation 3 – F. Cloppet 52
Fonctions / Paramètres formels et effectifs (4)
RAPPELS
Variable Locale / Globale (suite)
Variable Locale
UE programmation 3 – F. Cloppet 53
Fonctions / Paramètres formels et effectifs (5)
RAPPELS .....
int X; /* déf. variable globale */
Variable Locale / Globale (suite)
void toto2(){
int X = 5;
X*= 10;
}
void main(){
X = 20;
toto1();
printf ("%d\n", X);
toto2();
printf ("%d\n", X);
}
UE programmation 3 – F. Cloppet 54
Fonctions / Passage de paramètres (1)
2 modes de transmission
par valeur
UE programmation 3 – F. Cloppet 55
Fonctions / Passage de paramètres (2)
Passage par valeur
main()
fonction appelante int Min(int a, int b)
fonctionappelée
X 5 copie dans un emplacement
Y 8 local à la fonction a 6
6 8 b 8
X = 5; Y = 8; 5+1 {
printf("%d\n", Min(X+1 , Y ) ) ; return ((a<b)?a:b);
6 }
UE programmation 3 – F. Cloppet 56
Fonctions / Passage de paramètres (3)
Passage par adresse
l'adresse de la variable est passée en paramètre et non la valeur
int *B; => B est un pointeur sur un entier <=> B représente l'adresse
mémoire de la variable
UE programmation 3 – F. Cloppet 57
Fonctions / Passage de paramètres (4)
Passage par adresse
main()
fonction appelante void Transfo (int *a)
fonctionappelée
oxff15 a
oxff15
{ int i;
int X=0; X 01O f or(i=0; i<10;i++)
(*a)++;
Transfo(&X); }
printf("%d\n",X);
UE programmation 3 – F. Cloppet 58
Fonctions / Passage de paramètres (5)
Valeur ou adresse ?
Valeur
les paramètres effectifs ne doivent pas être modifiés
Adresse
paramètres effectifs doivent être modifiés
UE programmation 3 – F. Cloppet 59
Fonctions / Récursion (1)
En C, les fonctions peuvent être
utilisées de façon récursive
Ex:
Fonction Factorielle
0! = 1
n! = n * (n - 1) * (n - 2) * .......* 2 * 1
ou n! = n * (n-1)!
UE programmation 3 – F. Cloppet 60
Fonctions / Récursion (2)
dépilement
fact_4 fact_4 = 1 1
n4 = 0
fact_3 = n3 * fact_4 1
fact_3 n3 = 1
fact_1 = n1 * fact_2 6
fact_1 n1 = 3
UE programmation 3 – F. Cloppet 61
Langage C / Les Pointeurs
pointeur = variable qui contient l'adresse mémoire où est
stocké l'objet pointé (variable ou fonction)
p est un pointeur d'entiers
Oxff12
Organisation de la mémoire
Oxff13
p Oxff15
Oxff14
234 Oxff15
.
.
.
.
pointeur = groupe de cases (2 ou 4) qui
contient l'adresse de l'objet sur lequel il
pointe
UE programmation 3 – F. Cloppet 62
Les pointeurs / Déclaration
Exemple de déclaration
int *p ;
char *pc ;
UE programmation 3 – F. Cloppet 63
Les pointeurs / Opérateurs unaires * et &
A 234 Oxff15
.
.
* : opérateur d'indirection ou de .
déréférence .
UE programmation 3 – F. Cloppet 64
Les pointeurs / Initialisation
p est un pointeur d'entiers
Il existe 2 manières d'initialiser
Oxff12
un pointeur
Oxff13
p Oxff15
Affectation d'une adresse déjà Oxff14
existante A 234 Oxff15
.
.
.
.
Allocation dynamique
UE programmation 3 – F. Cloppet 65
Les pointeurs / Allocation dynamique (1)
Soient int *p1, *p2, *p3 ;
UE programmation 3 – F. Cloppet 66
Les pointeurs / Allocation dynamique (2)
malloc malloc
p1 est un pointeur d'entiers p2 est un pointeur d'entiers
Oxff12
Oxff12
Oxff13
Oxff13
p1 Oxff15 Oxff14
p2 Oxff17
Oxff14
Oxff15
Oxff15 Oxff16
.
Oxff17
.
. .
. .
.
.
UE programmation 3 – F. Cloppet Oxff21 67
Les pointeurs / Allocation dynamique (3)
calloc realloc
p3 est un pointeur d'entiers p3 est un pointeur d'entiers
Oxff11
p3 Oxff12
Oxff16
Oxff16 Oxff12
p3
Oxff13
.
Oxff14 .
Oxff15
Oxff15 0 Oxff16
0 Oxff17
0 Oxff16 .
0 .
0 Oxff17 0
.
. .
0 . 0 Oxff20
.
. .
0 . Oxff24
0 Oxff20 Oxff25
UE programmation 3 – F. Cloppet 68
Les pointeurs / Allocation dynamique (4)
Fonctions malloc, calloc, realloc sont définies dans stdlib.h
Leur type de retour est pointeur sur void => cast obligatoire
S'il n'y a pas assez d'espace mémoire => l'allocation ne peut pas se
faire => la valeur renvoyée est NULL
UE programmation 3 – F. Cloppet 69
Les pointeurs / Opérations (1)
Affectation de pointeurs
int *p, *p1, x=4 ; /* (I1) */ (I2) p NULL Oxff13 (I4) p Oxff15 Oxff13
Oxff14 Oxff14
p = NULL ; /* (I2) */ Oxff15 Oxff15
(I1) x 4 x 4
p1 = p; /* (I3) */ . .
(I3) p1 NULL p1 NULL
p = &x; /* (I4) */ . .
. .
. .
Que vaut *p ?
Sur quoi pointe p1 ?
UE programmation 3 – F. Cloppet 70
Les pointeurs / Opérations (2)
Comparaison de pointeurs
comparaison avec valeur NULL
UE programmation 3 – F. Cloppet 71
Les pointeurs / Opérations d’incrémentation (1)
Oxff12 Oxff12
x 4 Oxff15 x 4 Oxff15
.
Oxff16
.
y 8 . y 8 Oxff17
.
Oxff18
UE programmation 3 – F. Cloppet 72
Les pointeurs / Opérations d’incrémentation (2)
UE programmation 3 – F. Cloppet 73
Langage C / Les Tableaux (1)
Tableau = Liste de valeurs de même type qui sont consécutives en
mémoire
La déclaration d'un tableau réserve la place mémoire pour tous les éléments
du tableau
UE programmation 3 – F. Cloppet 74
Langage C / Les Tableaux (2)
int Tab [ 10 ] ; (10 cases de taille sizeof(int))
UE programmation 3 – F. Cloppet 75
Les Tableaux Monodimensionnels / Initialisation
UE programmation 3 – F. Cloppet 76
Les Tableaux Bidimensionnels / Déclaration –
Initialisation (1)
Ex : int Tab[5][2];
UE programmation 3 – F. Cloppet 78
Tableaux / Passage d’un tableau ou d’un élément
en paramètres
void maFonction1(int A) ;
maFonction1(Tab[5]) ;
maFonction2(Tab, NbTab) ;
maFonction3(&Tab[5]) ;
UE programmation 3 – F. Cloppet 79
Tableaux / Passage d’un tableau 2D en paramètres
Appel de la fonction
UE programmation 3 – F. Cloppet 80
Langage C / Les Tableaux de caractères (1)
'a' est un caractère => type char
"Bonjour à vous tous" est une chaîne de caractères => tableau de
caractères
Syntaxe de déclaration
char NomChaine[Nb_Elts] ;
Chaine
B O N J O U R \0
UE programmation 3 – F. Cloppet 81
Les tableaux de caractères / Initialisation
Au moment de la déclaration
char ch[] = " BONJOUR ";
char ch[] = {’B’,’O’,’N’,’J’,’O’,’U’,’R’,’\0’} ;
UE programmation 3 – F. Cloppet 82
Les tableaux de caractères / Fonctions prédéfinies (1)
gets(ch) ;
puts(ch) ;
UE programmation 3 – F. Cloppet 83
Les tableaux de caractères / Fonctions prédéfinies (2)
char ch[10] ;
strcpy(ch, "BONJOUR ! ") ;
UE programmation 3 – F. Cloppet 84
Les tableaux de caractères / Fonctions prédéfinies (3)
strcat :
strcat(ch1, ch2) ;
strcpy(ch1, "Bonjour") ;
strcat(ch1, " à vous") ;
printf("%s", ch1) ; => Bonjour à vous
strcmp :
toto = strcmp(ch1, ch2) ;
UE programmation 3 – F. Cloppet 85
Les tableaux de caractères / Fonctions prédéfinies (4)
strchr :
strchr(ch, c) ;
strcpy(ch1, "Bonjour") ;
c1 = strchr(ch1, 'o') ;
printf("%s\n", c1) ;
strlen :
toto = strlen(ch) ;
strcpy(ch1, "Bonjour") ;
toto = strlen(ch1) ;
printf(" longueur : %d\n", toto) ; => 7
UE programmation 3 – F. Cloppet 86
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (1)
int tab[10] ;
int *ptab ;
ptab = &tab[0] ;
ptab++ ;
ptab + i ;
*(ptab + i);
ptab[i];
UE programmation 3 – F. Cloppet 87
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (2)
Soient
int A;
int tab[10] ;
int *B, *ptab ;
char car ;
char chaine[10] ;
char *ch1, *ch2 ;
UE programmation 3 – F. Cloppet 88
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (3)
UE programmation 3 – F. Cloppet 89
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (4)
chaine est …
chaine[0] …
UE programmation 3 – F. Cloppet 90
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (5)
UE programmation 3 – F. Cloppet 91
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (6)
A = 256 ;
B = &A ;
ptab = tab ;
ptab = &tab[5] ;
ptab ++ ;
UE programmation 3 – F. Cloppet 92
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (7)
ch1 = chaine ;
ch2 = &chaine[2] ;
ch2 ++ ;
chaine = ch2 ;
UE programmation 3 – F. Cloppet 93
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (8)
(1) (2)
int A = 20, *B ;
B = &A ;
*B = 200 ;
(3) (4)
char ch[20] ;
ch= "Bonjour";
UE programmation 3 – F. Cloppet 94
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (9)
UE programmation 3 – F. Cloppet 95
Langage C / Synthèse Tableaux -Tableaux de
caractères - pointeurs (10)
ch= "Bonjour" ;
UE programmation 3 – F. Cloppet 96
Langage C / Synthèse Pointeurs / Tableaux de
pointeurs (1)
tab l u n d i
m a r d i
m e r c r e d i
s a m e d i
Avantage par rapport à un tableau 2D
UE programmation 3 – F. Cloppet 97
Langage C / Les structures (1)
UE programmation 3 – F. Cloppet 98
Les structures / Déclaration (1)
Syntaxe
Exemple
UE programmation 3 – F. Cloppet 99
Les structures / Déclaration (2)
Déclaration d'une structure permet de définir un modèle objet mais
n'engendre aucune réservation mémoire
Ex :
typedef struct produit { /* Nom de la structure */
int reference, categorie ;
char *nom, *provenance ;
} produit, *Pproduit ; /* Noms des nouveaux types */
produit UnProduit ;
Pproduit PtrProduit;
UE programmation 3 – F. Cloppet 101
Les structures / Initialisation
Au moment de la déclaration
Variable du type de la structure peut être initialisée par une liste
de valeurs constantes correspondant à chacun des membres
Ex:
produit UnProduit = {15, 3, "toto", "Inde"} ;
Ex : Accès aux valeurs stockées dans les champs d'une variable de type
pointeur sur produit
Pproduit PtrProduit ;
char *NomDuProduit ;
int NumDuProduit;
Ex :
syntaxe :
enum NomIdentificateur { liste de valeurs symboliques } ;
Ex :
"a"
pour les fichiers de type binaire ….
ex : FILE *fich ;
fich = fopen("toto.txt", "r") ;
ou fich=fopen("d :\\tmp\\toto.txt", "r");
UE programmation 3 – F. Cloppet 113
Les Fichiers / Fermeture
fonction fclose
int fclose( FILE *fic) => ferme le fichier pointé par fic
fprintf
ex : Écriture de deux entiers séparés par un espace, puis passage à la ligne.
fwrite
size_t fwrite(type *ptr, size_t tailleObj, size_t NbObjet, FILE *Fic)
l'inclusion de fichier
la substitution de symboles
le traitement de macro-instructions
la compilation conditionnelle
Substitution de symboles
Exemple :
Syntaxe :
#define nom(liste_parametres_formels) reste_de_la_ligne
Macro-instructions
Macro-instructions
Exemple :
Macro-instructions
Si on ne met pas de parenthèses sur les paramètres formels, il
peut y avoir des erreurs.
Macro-instructions
Exemple :
#define carre(a) ((a)*(a))
Compilation conditionnelle
#include <stdio.h>
#define AFFICHE 0
int main(){
int x = 10;
x = x +10;
#if AFFICHE
printf("x: %d\n", x);
#endif
printf("fin du programme\n");
return(1);
}
#include <stdio.h>
#define AFFICHE 1
int main(){
int x = 10;
x = x +10;
#if AFFICHE
printf("x: %d\n", x);
#endif
printf("fin du programme\n");
return(1);
}
#ifdef
Ces commandes permettent de tester si un symbole a été défini
par la commande #define
Exemple :
#ifndef
Exemple
Phase de compilation :
.c .o
fichier.c fichier.o prog.exe
Compilation séparée
Compilation séparée
Compilation Édition de liens
.h
fichier.h .o
fichier.o
.c
fichier.c
prog.exe
.c .o
main.c main.o
une table des variables et des fonctions qui sont utilisées mais
non définies
Règles de Communication(1)
1 variable ou 1 fonction est partagée entre 2 modules quand
elle est utilisée dans ces 2 modules
Seules les variables globales à un module peuvent être partagées
Règles de Communication(2)
extern int X ;
Protection de données
Cas où on ne désire pas que les symboles définis dans un module soient
accessibles depuis l'extérieur d'un module
Ex :
Fichier d'en-tête
En C un module doit être implanté à l'aide de deux fichiers :
les définitions dans un fichiers source (.c)
Inclusion Conditionnelle
pour éviter d'inclure plusieurs fois le contenu d'un fichier entete.h
Placer le contenu du fichier à l'intérieur d'une instruction conditionnelle
Ex :
#ifndef ENTETE
#define ENTETE
/* on met ici le contenu de entete.h */
#endif