L2 -UE Programmation 3 Langage C 2009...
Transcript of L2 -UE Programmation 3 Langage C 2009...
![Page 1: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/1.jpg)
L2 - UE Programmation 3Langage C2009 2010
Equipe pédagogique:Florence Cloppet
Neilze DortaDavid Janiszek
[email protected]@mi.parisdescartes.fr
![Page 2: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/2.jpg)
UE programmation 3 – F. Cloppet 2
Sommaire
1. Informations administratives2. Introduction3. Programmer en Langage C4. Notions de Langage C
1. Variables , Constantes2. Opérateurs3. Fonctions4. Pointeurs5. Tableaux6. Tableaux de caractères – chaîne de caractères7. Synthèse Tableaux - Pointeurs / Tableau de Pointeurs8. Structures – Unions – Énumérations9. Fichiers10. Pré-processeur11. Compilation séparée12. Intégration d’un programme C dans l’environnement hôte
![Page 3: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/3.jpg)
UE programmation 3 – F. Cloppet 3
Informations Administratives (1)
� Emploi du Temps
� Cours lundi 13h00-14h30 amphi Giroud
� L2 : 1TD et 1TP / semaine
� 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
![Page 4: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/4.jpg)
UE programmation 3 – F. Cloppet 4
Informations Administratives (2)
� Contrôle des Connaissances
� 1 Contrôle Continu sur machine à la mi-novembre (CC)
� 1 examen final (sur papier)
� Note finale = max ((CC+Examen) /2, Examen)
![Page 5: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/5.jpg)
UE programmation 3 – F. Cloppet 5
Bibliographie
� La Bible ….� Le langage C Norme ANSI , Brian W. Kernighan et Dennis M. Ritchie, Dunod 2ème Edition (2004)
� Un peu plus pédagogique� Programmer en langage, Claude Delannoy, Eyrolles
(2002)
![Page 6: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/6.jpg)
UE programmation 3 – F. Cloppet 6
Remarque
Poly disponible sur http://www.math-info.univ-paris5.fr/~cloppet/prog3/PolyProg3_2009.pdf
Attention ceci n’est qu’un résumé à trous …des transparents de cours
�Ce poly n’est là que pour vous aider à la prise de notes et ne vous dispense en aucun cas d’assister au cours !!!!
![Page 7: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/7.jpg)
UE programmation 3 – F. Cloppet 7
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.
� Un système informatique
CPU
Moniteur
Mémoire centrale
RAM
ROM
ImprimanteClavier
Disque Dur
Disquette
CDROM
![Page 8: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/8.jpg)
UE programmation 3 – F. Cloppet 8
Introduction / Notions de base (2)
� l’utilisateur et les programmes� système d’exploitation� les programmes applicatifs � programmes développés
� Relations programmes - Machines � système binaire =>langage machine
� langage d’assemblage ou assembleur
� langages de haut niveau
![Page 9: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/9.jpg)
UE programmation 3 – F. Cloppet 9
Introduction / Activité de programmation (1)
� Étudier le problème à résoudre� solution programmable ?
� Développer un programme optimal� programme fait ce qu’il est censé faire� programme prend en compte les situations anormales� programme facile à modifier et à étendre
� Limiter les coûts de production
� Appel aux techniques du génie logiciel � le développement d’un logiciel doit être divisé en plusieurs parties pour
être contrôlable
� modèles de développement de logiciels
![Page 10: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/10.jpg)
UE programmation 3 – F. Cloppet 10
Introduction / Activité de programmation (2)
Enoncé du
problèmeProblème Spécification
du système Saisie des
exigences exigences
fonctionnelles
Modèles abstraits
du système
conception
initiale
conception
finale
Modèle final
(code source)Solution
livraison
Aspects de conception liés aux problèmes
impliquant le monde réel
Aspects de conception liés
à la conception elle-même
améliorations
successives
Vue générale des activités de développement d’un système
![Page 11: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/11.jpg)
UE programmation 3 – F. Cloppet 11
Introduction / Langage C
� Conçu par B.W. Kernighan et D.M. Ritchie (années 1970)�pour développer le système d’exploitation Unix sur les stations de
travail
� Langage structuré de haut niveau (fonctions, structures de contrôle etc.)
� Langage de bas niveau (opérateurs permettant de travailler au niveau du codage machine)
� Il s’étend des stations de travail aux micro-ordinateurs
� Norme C ANSI (American Standards National Institute)�donner une définition non ambiguë et indépendante de la machine
� C++ est une extension de C
![Page 12: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/12.jpg)
UE programmation 3 – F. Cloppet 12
Programmer en Langage C (1)
� Réflexion (PHASE PRIMORDIALE)
� Saisie des instructions du code dans un fichier texte� fichier source qui doit avoir comme extension .c
� Une application peut être conçue comme une collection de modules, chaque module pouvant être :� une collection de sous-programmes,
� une collection de données partagées.
� De tels modules peuvent constituer des unités de programmes en C chacune mémorisée dans un fichier.
� Une unité de programme constitue une unité de compilation ou projet.
![Page 13: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/13.jpg)
UE programmation 3 – F. Cloppet 13
Programmer en Langage C (2)
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
toto
Exemple des phases de compilation et d'édition
de liens avec le compilateur cc sous UNIX.
� Compilation (3 étapes)� phase de pré-processing des
fichiers *.c
� compilation des fichiers *.c
� édition des liens
![Page 14: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/14.jpg)
UE programmation 3 – F. Cloppet 14
Programmer en Langage C / Illustration par l’exemple
#include <stdio.h> on demande d'inclure la librairie stdio.h.
void main() la fonction main sans argument
{ début du bloc de la fonction main
/* Ecriture de Bonjour */ un commentaire
printf("Bonjour !\n"); une instruction composée de la fonction printf
} fin du bloc de la fonction main
Après compilation de bonjour.c, le lancement du programme affiche àl'écran :
Bonjour !
![Page 15: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/15.jpg)
UE programmation 3 – F. Cloppet 15
Programmer en Langage C / Programme ? (1)
� programme = traduction en instructions
� Exemple : problème : Affichage des carrés des nombres de 0 à 9
Algorithme :
Calculer puis afficher le carré de 0Calculer puis afficher le carré de 1
..........Calculer puis afficher le carré de 8Calculer puis afficher le carré de 9
![Page 16: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/16.jpg)
UE programmation 3 – F. Cloppet 16
Programmer en Langage C / Programme ? (2)
Programme :
#include <stdio.h>
void main()
{
printf("Le carré de 0 est %d\n", 0*0);
printf("Le carré de 1 est %d\n", 1*1);
…… etc………
printf("Le carré de 8 est %d\n", 8*8);
printf("Le carré de 9 est %d\n", 9*9);
}
Le carré de 0 est 0 Le carré de 1 est 1 Le carré de 2 est 4 Le carré de 3 est 9 Le carré de 4 est 16 Le carré de 5 est 25 Le carré de 6 est 36 Le carré de 7 est 49 Le carré de 8 est 64 Le carré de 9 est 81
![Page 17: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/17.jpg)
UE programmation 3 – F. Cloppet 17
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
int carre (int a) définition de la fonction carre{ début du bloc de la fonction carre
return (a * a); on retourne la valeur entière a*a} fin du bloc de la fonction carre
void main() définition de la fonction main{ début du bloc de la fonction main
int i, j; déclaration des variables entières i et j
for(i = 0; i < NBFOIS; i++){ boucle for de 0 à NBFOIS-1j = carre(i); appel de la fonct. carre et affect. du résultat à jprintf("Le carré de %d est %d\n",i,j);
} fin du bloc for
} fin du bloc de la fonction main
![Page 18: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/18.jpg)
UE programmation 3 – F. Cloppet 18
Programmer en Langage C /Structure d’un programme C
#include <fichier d'entête>
#define constante valeur
typedef struct duo {
int a, b;
}tduo;
extern int VarGlobaleExt;
typefct1 fonction1(int, char);
typefct2 fonction2(int, int);
int VarGlobaleInt;
typefct1 fonction1(int a, char b)
{
return(variable1);
}
typefct2 fonction2(int a, b)
{
return(variable2);
}
void main()
{
int a, b;
a = fonction1(2,'a');
b = fonction2(2,3);
}
Directives de compilation
du préprocesseur
Définitions des types
Définitions des fonctions
et variables externes
Définitions des variables globales
au fichier
Définitions des fonctions
Définition de la fonction main et
appel d'autres fonctions.
monfichier.c
Définitions des fonctions
Paramétrage des fonctions internes
![Page 19: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/19.jpg)
UE programmation 3 – F. Cloppet 19
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
� Constantes (#define / const)
![Page 20: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/20.jpg)
UE programmation 3 – F. Cloppet 20
Notions Langage C / Variables (1)� Type d’une variable = défini suivant le type de valeurs qu’elle peut
prendre
� Types diffèrent par la place mémoire occupée
� char => caractère (1 octet) = 2 8 = 256 valeurs� En C un caractère est un entier car il s'identifie à son code ASCII (le plus
souvent).� On peut donc appliquer toutes les opérations entières sur les caractères
(addition, soustraction, etc.).char c;c = 'a' => c = 97
c = c + 1c = 'b' => c = 98
� int => entiers (2 octets) = 2 16 = 65 536 valeurs
![Page 21: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/21.jpg)
UE programmation 3 – F. Cloppet 21
Notions Langage C / Variables (2)
� float => réels (4 octets)
� double => grands réels (8 octets)
� En C, il n’existe pas de type booléen � Par convention : 0 � faux
tout entier différent de 0 � vrai
� Combinaison avec les mots short, long, unsigned, signed� long int => 4 ou 8 octets� signed char => [-128, 127]� unsigned char => [0, 255]
![Page 22: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/22.jpg)
UE programmation 3 – F. Cloppet 22
Notions Langage C / Variables (3)
� Syntaxe de déclaration d’une variable
NomDuType1 NomDeVariable1, NomDeVariable2 ;NomDuType2 NomDeVariable ;
� 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
![Page 23: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/23.jpg)
UE programmation 3 – F. Cloppet 23
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
![Page 24: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/24.jpg)
UE programmation 3 – F. Cloppet 24
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)
� globales: variable est allouée en début de programme et est détruite à la fin du programme
� Initialisation� initialiser une variable = lui affecter une valeur initiale
=> peut se faire en même temps que sa déclaration
=> Ex: int A=10 ;
� variable globale: automatiquement initialisée à 0 lors de sa définition
� variable locale: si pas d’initialisation, sa valeur n’est pas définie
&A
……..
OXf1 OXf2 OXf3
10
![Page 25: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/25.jpg)
UE programmation 3 – F. Cloppet 25
Notions Langage C / Variables (6)
� Classes particulières de variables
� extern : utilisé pour des variables globales déclarées dans d’autres fichiers
ex: extern int A ;
� register : variables de type registre sont stockées dans un registre
� 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
![Page 26: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/26.jpg)
UE programmation 3 – F. Cloppet 26
Notions Langage C / Variables (7)
#include <stdio.h>
int somme(int a){
int s=0 ; s=s+a ;
return(s) ;
}
void main(void){
int i, x ; for(i=0 ; i<4 ; i++){
printf("Rentrez la valeur de x\n ") ;
scanf("%d ", &x) ;
printf("La somme des nb rentrés est : %d\n ", somme(x)) ;
}
}
Exemple d’exécution
i valeur rentrée valeur affichée
0 5 5
1 4 4
2 10 10
3 3 3
int somme(int a){
static int s ;
s=s+a ;
return(s) ;
}
Exemple d’exécution
i valeur rentrée valeur affichée
0 5 5
1 4 9
2 10 19
3 3 22
![Page 27: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/27.jpg)
UE programmation 3 – F. Cloppet 27
Notions Langage C / Les constantes (1)
� Définies en utilisant les macro définitions
Ex: #define TOTO 5
=> le pré-processeur remplace dans la suite du programme toute référence à cette macro (TOTO) par sa définition
=> si on veut changer la valeur de TOTO il suffit de mettre à jour la définition de la macro
![Page 28: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/28.jpg)
UE programmation 3 – F. Cloppet 28
Notions Langage C/ Opérateurs (1)
� Opérateurs à 1, 2 ou 3 opérandes : unaires, binaires, ternaires
� Opérateurs arithmétiques et d ’affectation binaires+-*/= (affectation)% (reste de la division entière) : 10 % 8 = 2
� * et / sont prioritaires
![Page 29: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/29.jpg)
UE programmation 3 – F. Cloppet 29
Notions Langage C / Opérateurs (2)
� Si les opérandes ne sont pas de même type => le compilateur agrandit en général l’opérande le plus étroit
Ex: l ’affectation d ’un type étroit à un type plus large n’entraîne pas de problème alors que l’inverse peut entraîner une perte d’information
![Page 30: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/30.jpg)
UE programmation 3 – F. Cloppet 30
Notions Langage C / Opérateurs (3)
� Opérateur d’incrémentation unaire
var++;
++var;
mais (1) v1 = var++;différent de (2) v1 = ++var;
var -- => décrémente de 1 la valeur de var
� Opérateurs unaires combinés: associent une opération (+, -, *,/,%) avec une affectationvar += 10; var *=10;
![Page 31: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/31.jpg)
UE programmation 3 – F. Cloppet 31
Notions Langage C / Opérateurs (4)
� Opérateurs binaires de comparaison> <>= =<= =!=!
� Opérateurs logiques : && (ET logique), || (OU logique)
V V F F V F V F V F F F V V V F
A B A && B A || B
![Page 32: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/32.jpg)
UE programmation 3 – F. Cloppet 32
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
![Page 33: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/33.jpg)
UE programmation 3 – F. Cloppet 33
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
![Page 34: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/34.jpg)
UE programmation 3 – F. Cloppet 34
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
� << : opérateur de décalage à gauche
op1<<op2 => décalage vers la gauche de op2 bits de op1, les bits de droite sont remplacés par des 0
27 26 25 24 23 22 21 20
ex : 1 0 0 0 0 0 0 0 1
1<<2 0 0 0 0 0 1 0 0 ( = 1 *4)
![Page 35: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/35.jpg)
UE programmation 3 – F. Cloppet 35
Notions Langage C / Opérateurs (8)
� >> décalage à droite : op1 >> op2 => décalage vers la droite de op2 bits de op1
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)
![Page 36: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/36.jpg)
UE programmation 3 – F. Cloppet 36
Notions Langage C / Opérateurs (9)
( ), [], ->, . ~, ++, --, (signe +/-), *(adresse), &, sizeof(var)
*, /, % + , -<<, >>< <=, > >= = =, != & ^ | &&|| ? : tous les combinés
+ prioritaire
- prioritaire
![Page 37: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/37.jpg)
UE programmation 3 – F. Cloppet 37
Notions Langage C / Structures de Contrôle (1)
� 3 types de structure de contrôle
a - pour exprimer des prises de décision ;
b - pour exprimer des prises de décision à choix multiples ;
c - pour répéter une suite d’instructions.
� Expression d’une prise de décision :
if-else = expression conditionnelleSi (condition est vraie) Alors
faire Action1;Sinon
faire Action2;
![Page 38: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/38.jpg)
UE programmation 3 – F. Cloppet 38
� 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 ;
Notions Langage C / Structures de Contrôle (2)
![Page 39: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/39.jpg)
UE programmation 3 – F. Cloppet 39
� prises de décision à choix multiples : switchau 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 "
=> switch( valeur ){case 2 : case 4 : printf("Valeur positive\n ") ;
break ;
case -2 : case -4 : printf("Valeur négative\n ") ;
break ;
case 0 : printf("Valeur nulle\n ") ;
break ;
default : printf("Mauvaise valeur\n ") ;
}
Notions Langage C / Structures de Contrôle (3)
![Page 40: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/40.jpg)
UE programmation 3 – F. Cloppet 40
� Répéter une suite d’instructions
� while
while(condition_vraie){
instructions ;
}
� for
for(initialisation ; condition ; instructions d’incrémentation){
instructions ;
}
Notions Langage C / Structures de Contrôle (4)
![Page 41: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/41.jpg)
UE programmation 3 – F. Cloppet 41
� do-while
do{
instructions
}while(condition_vraie) ;
� Mots clés : break, continue
� break => permet de sortir immédiatement d’une boucle ou d’un switch
� continue => permet de passer immédiatement à une autre évaluation
de la boucle
Notions Langage C / Structures de Contrôle (5)
![Page 42: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/42.jpg)
UE programmation 3 – F. Cloppet 42
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;
printf("Rentrez 2 valeurs entières\n");scanf("%d %d", &x, &y);minimum = (x<y) ? x : y;printf (" Le minimum de %d et %d est : %d\n",x,y, minimum);printf("Rentrez 2 valeurs entières\n");scanf("%d %d", &z, &w);minimum = ((z<w) ? z : w);printf (" Le minimum de %d et %d est : %d\n",z,w, minimum);
}
� Écriture d’un fonction
![Page 43: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/43.jpg)
UE programmation 3 – F. Cloppet 43
Fonctions / Généralités (1)
� fonction permet de partitionner les gros traitements en tâches plus petites
� fonction permet de construire les programmes à partir de briques déjà existantes
� le découpage en fonction permet de gérer explicitement la communication entre ces modules
![Page 44: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/44.jpg)
UE programmation 3 – F. Cloppet 44
Fonctions / Généralités (2)
� main() est une fonction particulière
TRAITEMENTPARAMETRES
VALEUR DE
RETOUR
FONCTION
![Page 45: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/45.jpg)
UE programmation 3 – F. Cloppet 45
Fonctions / Déclaration (1)
� Déclaration d’une fonction en norme ANSI
TypeDeRetour NomDeFonction (Type1 Paramètre1, Type2 Paramètre2)
{
Déclarations des variables locales à la fonction
Liste des instructions
return ( Valeur de retour si elle existe ) ;
}
� Déclaration d’une fonction (sans la norme ANSI)
TypeDeRetour NomDeFonction (Paramètre1, Paramètre2)
Type1 Paramètre1 ;
Type2 Paramètre2 ;
{
……
}
![Page 46: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/46.jpg)
UE programmation 3 – F. Cloppet 46
Fonctions / Déclaration (2)
� Il est interdit de déclarer une fonction à l’intérieur d’une fonction
� Valeur de retour
� doit être de type scalaire (entier, réel, caractère, etc.) pointeur ou structure mais ne peut pas être un tableau
� si pas de mot clé return
� mot clé return à l’intérieur d’une fonction
� si return est suivi d’une valeur
� si pas de TypeDeRetour
� si fonction ne renvoie pas de valeur
![Page 47: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/47.jpg)
UE programmation 3 – F. Cloppet 47
Fonctions / Appel (1)
appel de fonction
fonction appelante fonction appelée
schéma d’un appel de fonction
![Page 48: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/48.jpg)
UE programmation 3 – F. Cloppet 48
Fonctions / Appel (2)
� Syntaxe d’un appel de fonction avec un TypeDeRetour = void
NomDeFonction ( Liste des paramètres ) ;
� Syntaxe d’un appel de fonction avec un TypeDeRetourTypeDeRetour Variable;
Variable = NomDeFonction ( Liste des paramètres ) ;
� Une fonction doit être définie avant d’être appelée ou alors elle doit être prototypée en début de fichier
![Page 49: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/49.jpg)
UE programmation 3 – F. Cloppet 49
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);
}
![Page 50: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/50.jpg)
UE programmation 3 – F. Cloppet 50
Fonctions / Paramètres formels et effectifs (1)
� paramètre formel => apparaît dans la définition de la fonction
� paramètre effectif => objet substitué au paramètre formel lors de l’exécution de la fonction
� la correspondance entre paramètres formels et effectifs est établie selon l’ordre d’apparition dans l’en-tête de la fonction
![Page 51: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/51.jpg)
UE programmation 3 – F. Cloppet 51
Fonctions / Paramètres formels et effectifs (2)
/* déclaration de la fonction Min */
int Min (int a, int b){
return(a<b ? a : b);
}
/* appel de la fonction Min */
x=5; y=8;
printf("%d\n",Min(x, y));
/* de même */
u=8; v=9;
printf("%d\n",Min(u, v));
![Page 52: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/52.jpg)
UE programmation 3 – F. Cloppet 52
Fonctions / Paramètres formels et effectifs (3)
RAPPELS� Variable Locale / Globale
� la portée d'une variable dépend de l'endroit où elle déclarée
� début de fichier => variable globale
� Début d'un bloc d'instruction => variable locale
� Variable Globale� allocation de cette variable par le compilateur dans un segment
permanent de données
� domaine de visibilité => de la déclaration à la fin du programme
![Page 53: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/53.jpg)
UE programmation 3 – F. Cloppet 53
Fonctions / Paramètres formels et effectifs (4)
RAPPELS� Variable Locale / Globale (suite)
� Variable Locale
� variable déclarée au début d'un bloc d'instructions
� accessible seulement dans le bloc où elle est déclarée
� créée lors du début de l'exécution du bloc d'instructions
� détruite à la sortie du bloc d'instructions
� paramètre formel = variable locale à la fonction
� attribut static => définition de variables rémanentes � variable conserve sa valeur entre 2 appels de la fonction� mais visible seulement dans la fonction où elle est définie
![Page 54: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/54.jpg)
UE programmation 3 – F. Cloppet 54
Fonctions / Paramètres formels et effectifs (5)
RAPPELS� Variable Locale / Globale (suite)
� Illustration par l’exemple
int X; /* déf. variable globale */
void toto1(){
X+=10;
}
void toto2(){
int X = 5;
X*= 10;
}
void main(){
X = 20;
toto1();
printf ("%d\n", X);
toto2();
printf ("%d\n", X);
}
.....
![Page 55: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/55.jpg)
UE programmation 3 – F. Cloppet 55
Fonctions / Passage de paramètres (1)
� 2 modes de transmission
� par valeur
� par adresse ou référence
� Passage par valeur� création d'une copie de l'objet paramètre effectif qui reçoit le nom
du paramètre formel
![Page 56: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/56.jpg)
UE programmation 3 – F. Cloppet 56
Fonctions / Passage de paramètres (2)
X=5; Y=8;
printf("%d\n", Min(X+1 , Y ) ) ;
fonction appelantefonctionappelée
main()intMin(int a, int b)
{
return((a<b)?a:b);
}
6 8
6
a 6b 8
copie dans un emplacement
local à la fonction
X 5Y 8
5+1
Passage par valeur
![Page 57: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/57.jpg)
UE programmation 3 – F. Cloppet 57
Fonctions / Passage de paramètres (3)
� Passage par adresse� l'adresse de la variable est passée en paramètre et non la valeur
� la fonction effectue son traitement directement sur le paramètre effectif
� 2 façons d'obtenir l'adresse d'une variable selon sa déclaration� int A; => variable A de type entier
=> &A est l'adresse de la variable A
� int *B; => B est un pointeur sur un entier <=> B représente l'adresse mémoire de la variable
=> la valeur contenue à cet emplacement mémoire est obtenue par *B;
![Page 58: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/58.jpg)
UE programmation 3 – F. Cloppet 58
Fonctions / Passage de paramètres (4)
int X=0;
Transfo(&X);
printf("%d\n",X);
fonction appelantefonctionappelée
main()void Transfo (int *a)
{ int i;
f or(i=0; i<10;i++)(*a)++;
}
oxff15
X1O
oxff15
0
a
Passage par adresse
![Page 59: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/59.jpg)
UE programmation 3 – F. Cloppet 59
Fonctions / Passage de paramètres (5)
� Valeur ou adresse ?� Valeur
� les paramètres effectifs ne doivent pas être modifiés
� 1 seule valeur à modifier, la valeur modifiée est renvoyée comme valeur de retour de la fonction
� Adresse� paramètres effectifs doivent être modifiés
� plusieurs valeurs doivent être renvoyées par la fonction
� pour passer un tableau en paramètres
![Page 60: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/60.jpg)
UE programmation 3 – F. Cloppet 60
Fonctions / Récursion (1)
� En C, les fonctions peuvent être utilisées de façon récursive
� possible car la gestion des appels de fonction est assurée dans une pile
� Ex: Fonction Factorielle
0! = 1n! = n * (n - 1) * (n - 2) * .......* 2 * 1
ou n! = n * (n-1)!
![Page 61: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/61.jpg)
UE programmation 3 – F. Cloppet 61
Fonctions / Récursion (2)
fact_1
fact_2
fact_3
n1 = 3
n2 = 2
fact_3 = n3 * fact_4
fact_1 = n1 * fact_2
fact_2 = n2 * fact_3empilement
NB : fact_1 = 1er appel de la fonction factorielle
dépilement
1
1
2
6
fact_4
n3 = 1
n4 = 0fact_4 = 1
Exemple d'exécution de la fonction Factorielle avec au départ n=3
![Page 62: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/62.jpg)
UE programmation 3 – F. Cloppet 62
Langage C / Les Pointeurs
� pointeur = variable qui contient l'adresse mémoire où est stocké l'objet pointé (variable ou fonction)
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p Oxff15
234
p est un pointeur d'entiers
� Organisation de la mémoire
pointeur = groupe de cases (2 ou 4) qui
contient l'adresse de l'objet sur lequel il
pointe
![Page 63: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/63.jpg)
UE programmation 3 – F. Cloppet 63
Les pointeurs / Déclaration
� La déclaration d'une variable de type pointeur fait toujours intervenir le type des objets pointés
� Exemple de déclaration
int *p ;
char *pc ;
![Page 64: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/64.jpg)
UE programmation 3 – F. Cloppet 64
Les pointeurs / Opérateurs unaires * et &
� & : fournit l'adresse de l'objet
opérande
ex : int A=234 ;&A;
� * : opérateur d'indirection ou de
déréférence
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p Oxff15
234
p est un pointeur d'entiers
A
![Page 65: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/65.jpg)
UE programmation 3 – F. Cloppet 65
Les pointeurs / Initialisation
� Il existe 2 manières d'initialiser un pointeur
� Affectation d'une adresse déjàexistante
�Allocation dynamique
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p Oxff15
234
p est un pointeur d'entiers
A
![Page 66: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/66.jpg)
UE programmation 3 – F. Cloppet 66
Les pointeurs / Allocation dynamique (1)
� Soient int *p1, *p2, *p3 ;
� Plusieurs manières d'allouer dynamiquement la mémoire
� p1 = (int *) malloc(sizeof(int)) ;
� p2 = (int*) malloc(5 * sizeof(int)) ;
� p3 = (int *) calloc(5, sizeof(int)) ;
� (int *) realloc(p3, 10*sizeof(int)) ;
![Page 67: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/67.jpg)
UE programmation 3 – F. Cloppet 67
Les pointeurs / Allocation dynamique (2)
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p1 Oxff15
p1 est un pointeur d'entiersOxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p2 Oxff17
p2 est un pointeur d'entiers
Oxff16
Oxff17
Oxff21
mallocmalloc
![Page 68: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/68.jpg)
UE programmation 3 – F. Cloppet 68
Les pointeurs / Allocation dynamique (3)
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p3 Oxff16
p3 est un pointeur d'entiers
Oxff16
Oxff17
Oxff20
0
0
0
0
0
Oxff11
Oxff12
Oxff15
.
.
p3 est un pointeur d'entiers
Oxff16
Oxff17
Oxff20
0
0
0
0
0
.
.
.
.
Oxff25
Oxff24
p3 Oxff16
.
.
calloc realloc
![Page 69: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/69.jpg)
UE programmation 3 – F. Cloppet 69
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
� NULL = valeur de pointeur constante prédéfinie� p = NULL => fait explicitement pointé p sur l'adresse 0 � 0 est la seule valeur entière que l'on peut comparer à des pointeurs
� Les espaces mémoires alloués par un malloc, un calloc ou un reallocdoivent être libérés à la fin de leur utilisation par la fonction free
free(pointeur);
![Page 70: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/70.jpg)
UE programmation 3 – F. Cloppet 70
Les pointeurs / Opérations (1)
� Affectation de pointeurs
int *p, *p1, x=4 ; /* (I1) */
p = NULL ; /* (I2) */p1 = p; /* (I3) */p = &x; /* (I4) */
� Que vaut *p ?� Sur quoi pointe p1 ?
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p
NULL
4
p et p1 sont des pointeurs d'entiers
NULL
p1
x
(I2)
(I1)
(I3)
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p
NULL
4
p1
x
(I4) Oxff15
![Page 71: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/71.jpg)
UE programmation 3 – F. Cloppet 71
Les pointeurs / Opérations (2)
� Comparaison de pointeurs� comparaison avec valeur NULL
� test d'égalité entre 2 pointeurs
� les autres relations d'ordre n'ont de sens que si on a une idée de l'implantation des objets en mémoire
� Opérations d'addition et de soustraction
Ex : int *p, x=4 ;p=&x ;p++ ;
oup+=4 ;
![Page 72: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/72.jpg)
UE programmation 3 – F. Cloppet 72
Les pointeurs / Opérations d’incrémentation (1)
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
.
p
p pointeur d'entiers
x
Oxff12
Oxff13
Oxff14
Oxff15
p
4x
Oxff17Oxff15
4
p++
Oxff16
Oxff17
Oxff18
8y 8y
si un entier est codé sur 16bits
![Page 73: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/73.jpg)
UE programmation 3 – F. Cloppet 73
Les pointeurs / Opérations d’incrémentation (2)
Oxff12
Oxff13
Oxff14
Oxff15
.
.
.
p
4
p pointeur d'entiers
x
Oxff12
Oxff13
Oxff14
Oxff15.
.
.
p
5x
Oxff14Oxff14
(*p)++
++ est prioritaire sur * =>
![Page 74: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/74.jpg)
UE programmation 3 – F. Cloppet 74
Langage C / Les Tableaux (1)
� Tableau = Liste de valeurs de même type qui sont consécutives en mémoire
� Syntaxe de déclaration d'un tableau monodimensionnel
NomDeType NomTableau [Nombre_Eléments] ;
� La déclaration d'un tableau réserve la place mémoire pour tous les éléments du tableau
� Chaque élément d'un tableau est considéré comme une variable
Tab[0] Tab[1] Tab[2] Tab[3] Tab[4] Tab[5] Tab[6]
![Page 75: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/75.jpg)
UE programmation 3 – F. Cloppet 75
Langage C / Les Tableaux (2)
� int Tab [ 10 ] ; (10 cases de taille sizeof(int))
� Tab est l’adresse du début du tableau.
� Tab [ i ] est la valeur de l'élément i du tableau.
� & Tab [ 0 ] est équivalent à Tab.
� & Tab [ i ] est l’adresse de l’élément i du tableau
![Page 76: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/76.jpg)
UE programmation 3 – F. Cloppet 76
Les Tableaux Monodimensionnels / Initialisation
� Les tableaux définis comme variables globales ont leurs cases initialisées à 0
� 2 types d'initialisation possibles� Initialisation du tableau en bloc avec un ensemble de valeurs au
moment de la déclaration
� Initialisation par des valeurs fournies par l'utilisateur
![Page 77: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/77.jpg)
UE programmation 3 – F. Cloppet 77
Les Tableaux Bidimensionnels / Déclaration –Initialisation (1)
� Syntaxe de déclaration d'un tableau bidimensionnel
NomDeType NomTableau[Nombre_Elts_lignes] [Nombre_Elts_colonnes] ;
Ex : int Tab[5][2];
� Intialisation avec un ensemble de valeurs lors de la déclarationint Tab[4][3] = {{1,3,5}, {2,4,6}, {3,5,7}} ;
ou 1 3 5
2 4 6
3 5 7
? ? ?
![Page 78: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/78.jpg)
UE programmation 3 – F. Cloppet 78
Les Tableaux Bidimensionnels / Déclaration –Initialisation (2)
� Initialisation par des valeurs fournies par l'utilisateur
int Tab[4] [3], i, j, valeur ;
for(i = 0 ; i < 4 ; i++)
for(j=0 ; j < 3 ; j++){
printf("Entrer la valeur n° %d, %d : ", i,j) ;
scanf("%d",&valeur) ;
Tab[i] [j] = valeur ;
}
![Page 79: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/79.jpg)
UE programmation 3 – F. Cloppet 79
Tableaux / Passage d’un tableau ou d’un élément en paramètres
int Tab[10], NbTab=10 ;
void maFonction1(int A) ;
void maFonction2(int A[ ], int Nb) ;
void maFonction3(int *A) ;
Les appels de fonction seront de la forme :
maFonction1(Tab[5]) ;
maFonction2(Tab, NbTab) ;
maFonction3(&Tab[5]) ;
![Page 80: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/80.jpg)
UE programmation 3 – F. Cloppet 80
Tableaux / Passage d’un tableau 2D en paramètres
� le nombre d'éléments de la 2ème composante est obligatoire
int Tab2[10][20], Nb_lig=10, Nb_col=20 ;
void Fonction2(int Tab2[ ] [20], int nb_ligne, int nb_colon) ;
Appel de la fonction
Fonction2( Tab2, Nb_lig, Nb_col) ;
� Pour tester l'égalité de 2 tableaux, il faut faire une comparaison élément par élément
![Page 81: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/81.jpg)
UE programmation 3 – F. Cloppet 81
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éclarationchar NomChaine[Nb_Elts] ;
Ex : char Chaine[10] ; /* déclaration d'un tableau de 10 caractères de nom Chaine */
� En C, une chaîne de caractères se termine toujours par '\0'Si la chaîne de caractères Chaine est égale à "Bonjour"
B O N J O U R \0
Chaine
![Page 82: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/82.jpg)
UE programmation 3 – F. Cloppet 82
Les tableaux de caractères / Initialisation
� Au moment de la déclarationchar ch[] = " BONJOUR "; char ch[] = {’B’,’O’,’N’,’J’,’O’,’U’,’R’,’\0’} ;
� Par des valeurs fournies par l'utilisateurchar ch[10] ;
for(i = 0 ; i < 9 ; i++) /* lecture caractère par caractère */
ch[i] = getch() ;
ch[i] = ‘\0’ ;
ou
scanf("%s ",ch) ; /* lecture en bloc de la chaîne de caractères */
� On ne peut pas écrire
char ch[10];
ch = "Bonjour" car ch est une adresse non réassignable
![Page 83: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/83.jpg)
UE programmation 3 – F. Cloppet 83
Les tableaux de caractères / Fonctions prédéfinies (1)
� Fonctions d'entrée / sortie :
char ch[100], ch1[100], ch2[100] ;
int toto, x=4 ;
scanf ("%s ", ch) ;
sscanf (ch1, "%s ", ch2) ;
sprintf(ch, "le nombre est %d\n ", x) ;
gets(ch) ;
puts(ch) ;
![Page 84: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/84.jpg)
UE programmation 3 – F. Cloppet 84
Les tableaux de caractères / Fonctions prédéfinies (2)
� Fonctions de traitement des chaînes de caractères :�définies dans la librairie string.h
� strcpy :
strcpy(ch1, ch2) ;
char ch[10] ;
strcpy(ch, "BONJOUR ! ") ;
� strcat, strcmp, strchr, strlen
char ch[100], ch1[100], ch2[100] , c, *c1;
int toto;
![Page 85: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/85.jpg)
UE programmation 3 – F. Cloppet 85
� strcat :
strcat(ch1, ch2) ;
strcpy(ch1, "Bonjour") ;
strcat(ch1, " à vous") ;
printf("%s", ch1) ; => Bonjour à vous
� strcmp :
toto = strcmp(ch1, ch2) ;
strcpy(ch1, "Bonjour") ; strcpy(ch2, "Bonsoir") ;
toto=strcmp(ch1,ch2) ;
printf("%d\n", toto) ;
Les tableaux de caractères / Fonctions prédéfinies (3)
![Page 86: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/86.jpg)
UE programmation 3 – F. Cloppet 86
� 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
Les tableaux de caractères / Fonctions prédéfinies (4)
![Page 87: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/87.jpg)
UE programmation 3 – F. Cloppet 87
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (1)
� En C, les pointeurs et les tableaux sont très fortement liés.
int tab[10] ;
int *ptab ;
ptab = &tab[0] ;
ptab++ ;
ptab + i ; *(ptab + i);
ptab[i];
![Page 88: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/88.jpg)
UE programmation 3 – F. Cloppet 88
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 ;
� Que représentent A, tab, tab[0], B, ptab, car, chaine, chaine[0], ch1, ch2 ?
![Page 89: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/89.jpg)
UE programmation 3 – F. Cloppet 89
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (3)
� A est une variable …
� tab est l’adresse de …
� B (et ptab) sont des …
� car est une variable …
![Page 90: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/90.jpg)
UE programmation 3 – F. Cloppet 90
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (4)
� chaine est …
� chaine[0] …
� ch1 et ch2 sont des …
![Page 91: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/91.jpg)
UE programmation 3 – F. Cloppet 91
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (5)
� Que représentent les suites d'instructions suivantes (avec les déclarations de variables précédentes)?
(1) A =256 ;B= &A ;
(2) ptab = tab ;
(3) ptab = &tab[5] ;
ptab++ ;
(4) strcpy(chaine, "Bonjour !") ;
ch1 = chaine ;
ch2 = &chaine[2] ;
ch2++ ;
� Peut on écrire chaine = ch2 ?
![Page 92: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/92.jpg)
UE programmation 3 – F. Cloppet 92
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (6)
� A = 256 ;
� B = &A ;
� ptab = tab ;
� ptab = &tab[5] ;
ptab ++ ;
![Page 93: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/93.jpg)
UE programmation 3 – F. Cloppet 93
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (7)
� strcpy(chaine, "BONJOUR ! ") ;
� ch1 = chaine ;
� ch2 = &chaine[2] ;
� ch2 ++ ;
� chaine = ch2 ;
![Page 94: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/94.jpg)
UE programmation 3 – F. Cloppet 94
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (8)
� Ces séquences d'instructions sont elles correctes ?
(1) (2)
int A = 20, *B ;
B = &A ;
*B = 200 ;
(3) (4)
char ch[20] ;
ch= "Bonjour";
![Page 95: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/95.jpg)
UE programmation 3 – F. Cloppet 95
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (9)
![Page 96: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/96.jpg)
UE programmation 3 – F. Cloppet 96
Langage C / Synthèse Tableaux -Tableaux de caractères - pointeurs (10)
� (3) char ch[20] ;
ch= "Bonjour" ;
(4) char *ch1;
ch1="Bonjour" ;
![Page 97: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/97.jpg)
UE programmation 3 – F. Cloppet 97
Langage C / Synthèse Pointeurs / Tableaux de pointeurs (1)
� Les pointeurs sont des variables
� Il est possible de les stocker dans des tableaux
�Ex : char *tab[4] = {"Lundi", "Mardi","Mercredi","Samedi"} ;
� Les 4 éléments du tableau sont des pointeurs de caractères
� Avantage par rapport à un tableau 2D
l n du
m r da
m r ce
s m ea
i
r
d
tab i
e d i
i
![Page 98: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/98.jpg)
UE programmation 3 – F. Cloppet 98
Langage C / Les structures (1)
� Une structure rassemble plusieurs entités qui peuvent avoir des types différents
� Structure permet de traiter un groupe de variables liées entre elles comme un tout et non comme des entités séparées.
� Notion différentes de la notion de tableau qui permet de regrouper des objets de même type
![Page 99: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/99.jpg)
UE programmation 3 – F. Cloppet 99
Les structures / Déclaration (1)
� Syntaxe
struct NomStructure{/* NomStructure = étiquette de la structure */type1 champ1 ;type2 champ2 ;.....
} ;
� mot clé struct indique une déclaration de structure constituée d'une liste de déclaration entre accolades
� Exemple
![Page 100: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/100.jpg)
UE programmation 3 – F. Cloppet 100
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
� Le modèle défini peut être utilisé dans une déclaration de variable
� Ex : Déclaration d'une variable nommée UnProduit de type structproduit
struct produit UnProduit ;
� Ex : Déclaration d'un pointeur de struct produit
struct produit *PtrProduit;
![Page 101: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/101.jpg)
UE programmation 3 – F. Cloppet 101
Les structures / Déclaration (3)
� Définition du type structure défini comme un type utilisateur
� utilisation de l'opérateur typedef
� syntaxe :typedef spécification_de_type nouveau_nom_de_type ;
� Ex :
typedef struct produit { /* Nom de la structure */
int reference, categorie ;
char *nom, *provenance ;
} produit, *Pproduit ; /* Noms des nouveaux types */
� Déclaration d'un produit et d'un pointeur sur un produit
� produit UnProduit ;
� Pproduit PtrProduit;
![Page 102: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/102.jpg)
UE programmation 3 – F. Cloppet 102
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"} ;
� Avec des valeurs rentrées par l'utilisateur
� appel à une fonction (définie dans le programme) qui remplira les champs de la structure et retournera la structure initialisée.
![Page 103: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/103.jpg)
UE programmation 3 – F. Cloppet 103
Les structures / Accès à un champ d’une structure (1)
� Si la variable est du type de la structure� opérateur •� Ex : Accès aux valeurs stockées dans les champs d'une variable de type
produit
produit UnProduit = {15, 3, "toto", "Inde"} ;char *NomDuProduit ;int NumDuProduit;
� Ex : remplissage des champs d'une variable de type produit ;
![Page 104: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/104.jpg)
UE programmation 3 – F. Cloppet 104
Les structures / Accès à un champ d’une structure (2)
� Si la variable est du type pointeur sur la structure
� opérateur : ->
� Ex : Accès aux valeurs stockées dans les champs d'une variable de type
pointeur sur produit
Pproduit PtrProduit ;
char *NomDuProduit ;int NumDuProduit;
![Page 105: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/105.jpg)
UE programmation 3 – F. Cloppet 105
Les structures / Tableaux de structures
� Si l'on veut compter le nombre d'occurrences de chaque mot d'une liste de mots clés : => 2 solutions
� gérer 2 tableaux en parallèle : char *liste_motcle[NB] ; /* NB supposé défini par 1 #define */int compteur[NB] ;
� utiliser un tableau de structure : typedef struct cle{
char *mot ;int compt ;
}cle ;
cle liste_cle[NB] ; /* NB supposé défini par 1 #define */
l'accès au 3ème mot clé :l'accès à son nombre d'occurrences :
![Page 106: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/106.jpg)
UE programmation 3 – F. Cloppet 106
Les structures / Composition de structures
� Une structure permet de définir un type qui peut être utilisé
� dans une déclaration de variable� comme type d'un des champs d'une autre structure =>
composition
� Ex :
![Page 107: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/107.jpg)
UE programmation 3 – F. Cloppet 107
Les structures / Struct. Récursives ou autoréférentielles
� structure récursive quand un des champs est du type de la structure qu'on est en train de définir
� Il est INTERDIT de définir une structure contenant une instance d'elle-même MAIS il n'est pas interdit qu'un champ soit du type pointeur sur la structure.
� Ex : typedef struct Individu{ typedef struct Individu{
char nom[40] ; char nom[40] ;int age ; int age ;struct Individu *pere, struct Individu pere,
*mere ; mere ;}Individu ; }Individu ;
écriture correcte écriture incorrecte
Avant de remplir les champs de pere et mere
=> allouer de l'espace
![Page 108: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/108.jpg)
UE programmation 3 – F. Cloppet 108
Langage C / Les Unions (1)
� Un objet de type union pourra contenir à des instants différents des objets de type et de taille différente.
� L'espace mémoire réservé correspond à l'espace mémoire nécessaire pour stocker le plus grand des types
� Définition d'une union est analogue à la définition d'une structureunion Cat{ /* la catégorie peut être soit de type int soit de type char * */
int Icat ;
char *Ccat ;
} ;
� Un objet de type structure est composé de
� Un objet de type union est composé d'un
![Page 109: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/109.jpg)
UE programmation 3 – F. Cloppet 109
Langage C / Les Unions (2)
� L'accès aux membres d'une union se fait comme pour les structures� On peut placer des unions à l'intérieur de structures
typedef struct produit {
int reference, TypeCat ; /* TypeCat = 0 : int, TypeCat = 1 : char */
union cat{ /* Nom de l’union */
int Icat ;
char *Ccat ;
} Cat ; /* Champs Cat de type Union cat */
char *nom, *provenance ;
} produit, *ptproduit ;
produit P ; …. /* On suppose les champs de P remplis */
![Page 110: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/110.jpg)
UE programmation 3 – F. Cloppet 110
Langage C / Les Énumérations (1)
� n'existent pas dans le standard défini par Kernighan et Ritchie
� mais admises par de + en + de compilateurs
� une déclaration d'énumération permet de définir un modèle d'entiers dont les valeurs sont notées par des constantes symboliques
� syntaxe :enum NomIdentificateur { liste de valeurs symboliques } ;
� Ex :
![Page 111: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/111.jpg)
UE programmation 3 – F. Cloppet 111
� Intérêt : facilite la compréhension et la maintenance du programme
� Ex :typedef enum Couleur{VERT,ORANGE,ROUGE} CouleurFeu;CouleurFeu Feu;
Feu = ORANGE ;printf("Couleur du feu : %d\n", Feu) ; => Couleur du feu : 1
switch(Feu){case VERT: printf("passez\n");
break;case ORANGE: printf("ralentissez\n");
break;case ROUGE: printf("arrêtez vous\n");
break;}
Langage C / Les Énumérations (2)
![Page 112: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/112.jpg)
UE programmation 3 – F. Cloppet 112
Langage C / Les Fichiers (1)
� Les fichiers permettent de conserver de façon permanente des informations dans la mémoire de masse d’un ordinateur.
� Ce sont des objets qui sont manipulés de manière linéaire, du début jusqu’à la fin.
� La méthode classique d’utilisation des fichiers est :
• Ouverture d’un fichier.
• Opération sur le fichier (lire, écrire, ajouter).
• Fermeture du fichier.
� FILE est le type d'un fichier => librairie <stdio.h>
ex de déclaration : FILE *fich;
![Page 113: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/113.jpg)
UE programmation 3 – F. Cloppet 113
Les Fichiers / Ouverture
� fonction fopen
FILE *fopen(char *chemin, char *mode d'accès)renvoie NULL si erreur lors de la tentative d'ouverture
modes (fichiers de type texte)"r""w"
"a"pour les fichiers de type binaire ….
ex : FILE *fich ;fich = fopen("toto.txt", "r") ;
ou fich=fopen("d :\\tmp\\toto.txt", "r");
![Page 114: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/114.jpg)
UE programmation 3 – F. Cloppet 114
Les Fichiers / Fermeture
� fonction fcloseint fclose( FILE *fic) => ferme le fichier pointé par fic
� Ex. de séquence ouverture / fermeture de fichierFILE *Fic = NULL ;
charchar NomFichierNomFichier[200] [200] ;;.......Fic = fopen(NomFichier, "w ") ;
if(Fic == NULL){
printf("Erreur à l’ouverture du fichier %s ", NomFichier) ;
return ;
}
…… traitement ……
fclose(Fic) ;
![Page 115: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/115.jpg)
UE programmation 3 – F. Cloppet 115
Les Fichiers / Opérations (1)
� Entrées / Sorties de caractères� char fgetc(FILE *fic)
� char fputc(char c, FILE *fic)
� Ex : Affichage de tous les caractères d'un fichier sur la sortie standard
char c ;
FILE *Fic ;
.......
while((c = fgetc(Fic)) != EOF)
printf("%c",c) ;
![Page 116: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/116.jpg)
UE programmation 3 – F. Cloppet 116
Les Fichiers / Opérations (2)
� Entrées / Sorties avec formatage (sur fichiers en mode texte)� fscanf
ex : Lecture de deux entiers séparés par un espace, puis passage à la ligne.
� fprintf
ex : Écriture de deux entiers séparés par un espace, puis passage à la ligne.
![Page 117: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/117.jpg)
UE programmation 3 – F. Cloppet 117
Les Fichiers / Opérations (3)
� Entrées / Sorties de blocs (sur fichiers ouverts en mode binaire)
� fread
size_t fread(type *ptr, size_t tailleObj, size_t NbObjet, FILE *Fic)
� fwrite
size_t fwrite(type *ptr, size_t tailleObj, size_t NbObjet, FILE *Fic)
![Page 118: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/118.jpg)
UE programmation 3 – F. Cloppet 118
Les Fichiers / Opérations (4)
� Lecture de 40 caractères du fichier pointé par Fic dans le tableau tabFILE*Fic ;
char tab[40] ;
........
fread(tab, sizeof(char), 40, Fic) ;
� Ecriture de 40 caractères du tableau tab, dans le fichier pointé par Fic FILE*Fic ;
char tab[40] ;
........
fwrite(tab, sizeof(char), 40, Fic) ;
![Page 119: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/119.jpg)
UE programmation 3 – F. Cloppet 119
Les Fichiers / Opérations (5)
� fseek => positionnement du marqueur de fichierint fseek (FILE *flux, long offset , int mode)
fseek fait pointer le pointeur de fichier associé au flux
flux offset octets plus loin.
mode peut prendre les valeurs 0, 1, 2 selon que le
déplacement doit être :
� 0 : par rapport au début du fichier
� 1 : par rapport à la position courante
� 2 : par rapport à la fin du fichier.
![Page 120: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/120.jpg)
UE programmation 3 – F. Cloppet 120
Les Fichiers / Opérations (6)
� ftell => retourne la position du marqueur de fichier� ces 2 fonctions sont surtout utiles pour gérer des fichiers avec des structures (du type fiches)
� rewind => met le marqueur en début de fichier
� remove => destruction d'une fichier
� rename => change le nom d'un fichier
![Page 121: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/121.jpg)
UE programmation 3 – F. Cloppet 121
Langage C / Le pré-processeur (1)
� Le préprocesseur est un programme standard qui effectue des modifications sur un texte source.
� Il modifie le source d'après les directives données par le programmeur, et introduites par le caractère #.
� La directive du préprocesseur commence par un # et se termine par la fin de ligne.
![Page 122: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/122.jpg)
UE programmation 3 – F. Cloppet 122
Langage C / Le pré-processeur (2)
� Le préprocesseur peut rendre plusieurs services :
� l'inclusion de fichier
� la substitution de symboles
� le traitement de macro-instructions
� la compilation conditionnelle
![Page 123: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/123.jpg)
UE programmation 3 – F. Cloppet 123
Langage C / Le pré-processeur (3)
� L'inclusion de fichier source� La commande #include du préprocesseur permet d'inclure des
fichiers source.� Lorsque le préprocesseur rencontre la commande #include, il
remplace cette ligne par le contenu du fichier.� Syntaxe
![Page 124: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/124.jpg)
UE programmation 3 – F. Cloppet 124
Langage C / Le pré-processeur (4)
� Substitution de symboles
� #define nom reste-de-la-ligne
� le préprocesseur remplace toute nouvelle occurrence de nom par reste-de-la-ligne dans toute la suite du source.
� Exemple :
![Page 125: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/125.jpg)
UE programmation 3 – F. Cloppet 125
Langage C / Le pré-processeur (5)
� Macro-instructions� Une définition de macro-instruction permet une substitution de
texte paramétrée par des arguments.
� Syntaxe :� #define nom(liste_parametres_formels) reste_de_la_ligne
� La liste de paramètres formels est une liste d'identificateurs séparés par des virgules.
� Il n'y a pas d'espace entre le nom et (
� Toute occurrence ultérieure de nom sera un appel de la macro et devra avoir la forme :
� nom(liste_parametres_effectifs)
![Page 126: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/126.jpg)
UE programmation 3 – F. Cloppet 126
Langage C / Le pré-processeur (6)
� Macro-instructions
� Lors de l'appel, le préprocesseur remplace
� l'ensemble nom de la macro et liste des paramètres effectifs "parenthésés "
par � la chaîne reste_de_la_ligne dans laquelle toutes les occurrences des
paramètres formels sont remplacées par les paramètres effectifs.
![Page 127: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/127.jpg)
UE programmation 3 – F. Cloppet 127
Langage C / Le pré-processeur (7)
� Macro-instructions� Exemple :
� borne_inferieure = min(i,j); Remplacé par borne inferieure = ((i)<(j) ? (i):(j))� borne_superieure = max(i,j); Remplacé par borne superieure = ((i)>(j) ? (i):(j))
![Page 128: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/128.jpg)
UE programmation 3 – F. Cloppet 128
Langage C / Le pré-processeur (8)
� Macro-instructions
� Si on ne met pas de parenthèses sur les paramètres formels, il peut y avoir des erreurs.
� On recommande donc de toujours utiliser deux règles dans la définition d'une macro-instruction :
� parenthéser les occurrences des paramètres formels;� parenthéser le corps complet de la macro.
![Page 129: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/129.jpg)
UE programmation 3 – F. Cloppet 129
Langage C / Le pré-processeur (9)
� Macro-instructions
� Attention aux effets de bord inattendus sur les paramètres effectifs.
� Exemple : #define carre(a) ((a)*(a))
� L'utilisation de carre(x++) sera transformé en ….
![Page 130: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/130.jpg)
UE programmation 3 – F. Cloppet 130
Langage C / Le pré-processeur (10)
� Compilation conditionnelle
� Les mécanismes de compilation conditionnelle ont pour but de compiler ou d'ignorer des ensembles de lignes, le choix étant basé sur un test exécuté à la compilation.
![Page 131: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/131.jpg)
UE programmation 3 – F. Cloppet 131
Langage C / Le pré-processeur (11)
� Compilation conditionnelle : #if� Syntaxe :
#if expressionensemble-de-lignes
#endif
� ensemble-de-lignes est une suite de lignes quelconques.
� L'évaluation de expression a lieu au moment de la compilation.
� Si expression est vraie ensemble-de-lignes est compilé.
![Page 132: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/132.jpg)
UE programmation 3 – F. Cloppet 132
Langage C / Le pré-processeur (12)
� Compilation conditionnelle : #if #else #elif
![Page 133: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/133.jpg)
UE programmation 3 – F. Cloppet 133
Langage C / Le pré-processeur (13)
� Compilation conditionnelle� Exemple
#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);
}
![Page 134: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/134.jpg)
UE programmation 3 – F. Cloppet 134
Langage C / Le pré-processeur (14)
� Compilation conditionnelle� Exemple
#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);
}
![Page 135: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/135.jpg)
UE programmation 3 – F. Cloppet 135
Langage C / Le pré-processeur (15)
� #ifdef� Ces commandes permettent de tester si un symbole a été défini
par la commande #define
� Exemple :
![Page 136: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/136.jpg)
UE programmation 3 – F. Cloppet 136
Langage C / Le pré-processeur (16)
� #ifndef
#ifndef (NOM) ou #if !defined (NOM) instructions instructions
#endif #endif
� Exemple
![Page 137: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/137.jpg)
UE programmation 3 – F. Cloppet 137
Langage C / Le pré-processeur (17)
� L'opérateur defined est un opérateur spécial : il ne peut être utilisé que dans le contexte d'une commande #if ou #elif.
� Il permet d'écrire des tests portant sur la définition de plusieurs symboles alors que #ifdef ne peut en tester qu'une.
� Syntaxe :defined nom ou defined(nom)
� Exemple : #if defined(SYMBOLE1) || defined(SYMBOLE2)
![Page 138: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/138.jpg)
UE programmation 3 – F. Cloppet 138
Langage C / Compilation séparée (1)
� Compilation simple (Rappel)
� Phase de compilation :
� Phase d'édition de liens :
.c .o
Compilation Édition de liens
fichier.c fichier.o prog.exe
source code objet programme exécutable
![Page 139: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/139.jpg)
UE programmation 3 – F. Cloppet 139
Langage C / Compilation séparée (2)
� Compilation séparée
� Lorsqu'un programme devient grand, il devient intéressant � de diviser le code source en plusieurs fichiers .c,
� De plus, vous pouvez regrouper un ensemble de fonctions et l'isoler dans un fichier source ce qui permet de pouvoir les réutiliser dans d'autres projets.
![Page 140: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/140.jpg)
UE programmation 3 – F. Cloppet 140
Langage C / Compilation séparée (3)
� Compilation séparée
.c
.o
Compilation Édition de liens
fichier.c
fichier.o
prog.exe
source code objet programme exécutable
.h
fichier.h
.c
main.c
.omain.o
![Page 141: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/141.jpg)
UE programmation 3 – F. Cloppet 141
Langage C / Compilation séparée (4)
� Un fichier objet (.o) est un fichier contenant :
� le code compilé du source correspondant
� une table des variables et des fonctions exportées définies dans le source
� une table des variables et des fonctions qui sont utilisées mais non définies
![Page 142: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/142.jpg)
UE programmation 3 – F. Cloppet 142
Langage C / Communication entre modules (1)
� 1 Application peut être conçue comme une collection de modules
� module = unité de programme mémorisée dans un fichier, qui constitue une unité de compilation
� les unités sont compilées séparément
�tâche de l'éditeur de liens = …
�1 protocole est nécessaire pour la communication entre les divers modules
![Page 143: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/143.jpg)
UE programmation 3 – F. Cloppet 143
� 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
� Toute fonction peut-être partagée
� 1 variable ou fonction partagée doit faire l'objet d'une déclaration d'importation dans le module où elle est utilisée mais non définie
�mot clé extern
Langage C / Communication entre modules (2)
![Page 144: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/144.jpg)
UE programmation 3 – F. Cloppet 144
� Règles de Communication(2)
� Déclaration d'importation d'une variable
extern int X ;
� Déclaration d'importation d'une fonction
extern void toto() ; ou extern void toto(int) ;
Langage C / Communication entre modules (3)
![Page 145: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/145.jpg)
UE programmation 3 – F. Cloppet 145
Module 1 Module 2
int v=23;
int x=25;
extern int Val;
extern int Fonct();
main(){
....
}
int Val=100;
int Fonct(int P){
extern int v;
int j;
........
}
int Toto(float z){
.......
}
extern int Fonct(int);
Langage C / Communication entre modules (4)
int y=6, res;
res=Fonct(y);
![Page 146: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/146.jpg)
UE programmation 3 – F. Cloppet 146
� 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
� Conflit entre variables souvent quand plusieurs personnes interviennent sur un projet et ne se concertent pas pour les noms
� Pour rendre un identificateur non exportable => attribut static
Ex :
Langage C / Communication entre modules (5)
![Page 147: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/147.jpg)
UE programmation 3 – F. Cloppet 147
� 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)
� les déclarations des variables et fonctions exportables (utilisables dans d'autres modules) dans un fichier d'en-tête (.h)
� Un module utilisant les fonctions et/ou les variables d'un autremodule doit "inclure" le fichier d'en-tête de celui-ci (pour avoir les déclarations).
Langage C / Communication entre modules (6)
![Page 148: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/148.jpg)
UE programmation 3 – F. Cloppet 148
� Fichier d'en-tête (suite)� Exemple
#include <stdio.h>
extern void empiler(double);
void main(void){
double x ;
.......
empiler (50) ;
....
}
main.c
#include <stdio.h>
#include "pile.h"
void empiler(double y){
.......
}
double depiler (void){
....
}
pile.c
void empiler (double);
double depiler(void) ;
pile.h
Langage C / Communication entre modules (7)
![Page 149: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/149.jpg)
UE programmation 3 – F. Cloppet 149
� 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
expression ENTETE vaut 0 si le fichier n'a pas été inclus1 s'il a déjà été inclus
Langage C / Communication entre modules (8)
![Page 150: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/150.jpg)
UE programmation 3 – F. Cloppet 150
main.c pile.c pile.h
Langage C / Communication entre modules (9)
![Page 151: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/151.jpg)
UE programmation 3 – F. Cloppet 151
� Fichier d'en-tête (suite)� Exemple
main.c pile.c pile.h
Problème: empiler et depiler doivent être vues comme étant définies dans un autre fichier source=>prototypes précédés de extern
Langage C / Communication entre modules (10)
![Page 152: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/152.jpg)
UE programmation 3 – F. Cloppet 152
Langage C / Communication entre modules (11)
#include <stdio.h>
#include "pile.h"
void main(void){
double x ;
.......
empiler (50) ;
x = depiler();
....
}
main.c
#include <stdio.h>
#define PILE
#include "pile.h"
void empiler(double y){
.......
}
double depiler (void){
....
}
pile.c pile.h
void empiler (double);
double depiler(void);
extern void empiler (double);
extern double depiler(void);
![Page 153: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/153.jpg)
UE programmation 3 – F. Cloppet 153
Langage C / Arguments de la ligne de commandes (1)
� Langage C offre des mécanismes qui permettent d'intégrer
parfaitement un programme C dans l'environnement hôte
� ex: environnement orienté ligne de commande (Unix, Linux)
� Programme C peut recevoir de la part de l'interpréteur de
commandes qui a lancé son exécution, une liste d'arguments
� Liste = ligne de commande qui a servi à lancer l'exécution du
programme
� Liste composée
� Du nom du fichier binaire contenant le code exécutable du programme
� des paramètres de la commande
![Page 154: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/154.jpg)
UE programmation 3 – F. Cloppet 154
Langage C / Arguments de la ligne de commandes (2)
� Fonction main reçoit tous ces éléments de la part de
l’interpréteur de commandes
� 2 paramètres
� argc (argument count)
� argv (argument vector)
![Page 155: L2 -UE Programmation 3 Langage C 2009 2010helios.mi.parisdescartes.fr/~cloppet/prog3/PolyCoursProg... · 2012-12-17 · UE programmation 3 –F. Cloppet 12 Programmer en Langage C](https://reader031.fdocument.pub/reader031/viewer/2022022809/5e77d14bcb023208a133c336/html5/thumbnails/155.jpg)
UE programmation 3 – F. Cloppet 155
Langage C / Arguments de la ligne de commandes (3)
� Si on veut analyser la ligne de commande, l’entête de la fonction
main est alors