Slides 2017
Slides 2017
INSA Toulouse
3ième IMACS-MIC
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
2/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
3/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Généralités
4/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
5/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
6/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
7/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
8/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
9/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
10/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
11/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
12/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
13/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
14/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
La boucle for(II.1)
for ( <pre - actions >; < conditions >; < post - actions >)
< corps - de - la - boucle >
15/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
16/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
do
< corps - de - la - boucle >
while ( < condition >) ;
17/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
18/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
< condition > ? < expr - si - vrai > : < expr - si - faux >
19/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
switch (i) {
case 0:
p r i n t f( " c o u c o u" ) ;
break ;
case 1:
...
}
21/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
22/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
23/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le résultat peut être un type (int, char, ...) ou void (équivalent d’une
procédure ADA)
24/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
f2()
NON OUI
f2()
26/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
27/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
< type > < n o m _ f onction > ( < type > , < type > , ...)
Ex : int f ( int ) ;
Définition :
int f ( int x )
{
r e t u r n x *2;
}
une fonction appelée doit être déclarée avant la définition appelante mais
le compilateur ne génère pas d’erreur par défaut !
28/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
30/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
31/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Exemples (IV.1.2)
p = m << ( d - n + 2) -1
equivalent a :
p = m << ( d - n + 2 - 1)
equivalent a :
p = m << d - n + 2 - 1
33/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
34/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
mémoire
0x8bc4e2
adresses
variable
Déclaration d’un pointeur :
< type > * p o i n t e u r ;
Ex : int * p E n t i e r;
35/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
mémoire
0x8bc4e2 ...
chaine[1]
Opérations et pointeurs (V.3)
affectation, 6 opérateurs relationnels, incrémentation, décrémentation
addition et soustraction avec entier
37/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
// f 1 et f2 sont equivalentes
void f1 ( int Table []) ;
void f2 ( int * Table ) ;
38/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
void f1 ( d o u b l e * r e f _ d o u b l e) {
// r e f d o u b l e : a d r e s s e
// ∗ r e f d o u b l e e s t l e nombre reel
/ / q u e l ’ on p e u t m o d i f i e r
* r e f _ d o u b l e += 2.0;
}
int main ()
{
d o u b l e N b _ R e e l =0.0;
// e x p l i c i t e m e n t passer l ’ adresse de Nb Reel
f1 (& N b _ R e e l) ;
}
39/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
12
40/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
41/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
42/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
43/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
45/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
46/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
47/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
f1() f3()
f2() f4()
49/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
p r i n t f( " % d \ n " ,i ) ;
i ++;
}
50/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
51/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
52/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
53/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
54/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
55/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
56/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
struct Personnel {
u n s i g n e d int Age ;
s t r u c t E n t r e p r i s e Ecole ;
};
struct Modele
{
int a ;
char c ;
double f;
};
s t r u c t M o d e l e V a r S t r u c t;
s t r u c t M o d e l e * p S t r u c t;
57/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
p S t r u c t = & V a r S t r u c t;
char d = pStruct - > c ;
58/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
s t r u c t Mois {
char Nom [20];
int Jours ;
};
59/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
s t r u c t Liste {
d o u b l e v a l e u r;
s t r u c t Liste * s u i v a n t;
};
8 10 12
60/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Appelee(struct S * s) Appelee(struct S * s)
61/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
struct S {
...
};
fich.h
63/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
union N o m b r e {
int E n t i e r;
d o u b l e Reel ;
};
union N o m b r e nb ;
nb . E n t i e r = 3;
/∗ est i n t e r p r e t e comme un entier ∗/
nb . Reel = 5.0;
/∗ est i n t e r p r e t e comme un d o u b l e ∗/
65/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
struct Modele {
char * Nom ;
int E n t i e r;
union {
int V a l _ E n t;
d o u b l e V a l _ R e e l;
} C h a m p _ U n i o n;
}
66/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
union R e f _ D o n n e e s {
char B [4];
short W [2];
long L ;
};
=> simulation d’un registre d’un processeur qui peut être considéré
comme 1 mot long (32 bits), deux mots (16 bits) ou quatre octets
(valable sur architecture 32 bits)
67/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
68/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
69/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
71/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
accès le plus rapide dès lors que les blocs sont assez gros
Tampon est l’adresse en mémoire d’un tableau de caractères (origine ou
destination) ; dans le cas d’un tableau destination, c’est au
programmeur à réserver l’espace mémoire suffisant !
Taille_Bloc est la taille d’un bloc en octets
Nombre est le nombre de blocs à lire
ces 2 fonctions retournent le nombre de blocs transférés
73/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
FILE * f ;
f = fopen ( " / etc / hosts " ," r " ) ;
fseek (f ,0 ,2) ; Que fait ce p r o g r a m m e ?
p r i n t f( " % d \ n " , ftell ( f ) ) ;
f c l o s e( f ) ; 74/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
75/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
p r i n t f( " B o n j o u r ! " ) ;
// affichage entier puis hexadecimal
p r i n t f( " % d % x " ,val , val ) ;
// affiche bonjour e t un r e t o u r chariot
p r i n t f( " B o n j o u r \ n " ) ;
76/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
77/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
lit dans le flux pointé par pFic les données dont le nombre et le type
sont précisés dans la chaı̂ne de format
scanf est la fonction fscanf avec stdin comme premier paramètre
78/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
écrit dans le flux pointé par pFic les données dont le nombre et le type
sont précisés dans la chaı̂ne de format
printf est la fonction fprintf avec stdout comme premier paramètre
79/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
exécute les mêmes conversions que printf mais range le résultat dans
une chaı̂ne de caractères en mémoire (ici chaine)
80/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
1 Introduction
2 Variables et opérateurs
3 Instructions itératives et instructions de contrôle
4 Les fonctions
5 Evaluation des expressions
6 Les pointeurs
7 Fonctions et pointeurs
8 Classes de mémorisation
9 Les structures
10 Les entrées/sorties
11 Le préprocesseur
81/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
82/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
La macro-substitution (A.1)
permet de remplacer dans le texte du fichier, un identificateur (mot,
opérateur, symbole, ...) par un texte de substitution
# define RC p u t c h a r( ’\ n ’) ;
# define BEGIN {
# define LONG " Ca c ’ est un texte qui tient meme \
pas sur une seule ligne "
83/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
Ex : #define CUBE(X) X * X * X
int Puiss3, val = 4;
Puiss3 = CUBE(val)
⇒ la substitution effectuée est : Puiss3 = val * val * val
⇒ CUBE(val + 1) donne
val + 1 * val + 1 * val + 1 = 13 ! ! !
dans le cas d’expressions numériques, utiliser les parenthèses autour de
l’expression et autour de chaque argument !
#define CUBE(X) ((X) * (X) * (X))
84/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
# d e f i n e FATAL ( num ) \
{ f p r i n t f( stderr , " \ n E r r e u r % d \ n " ,( Num ) ) ;\
exit (1) ;\
}
85/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
86/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
87/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
# ifndef TAILLE
# d e f i n e T A I L L E 100
# endif
# if 0
# zone non c o m p i l e e
# endif
88/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
La compilation conditionnelle (A.3 suite)
le problème des inclusions multiples : lorsqu’un fichier est inclus, faire en
sorte qu’il le soit bien une seule fois
#include "f.h" #include "f.h" struct S {
#include "g.h" int i;
int j;
g.c g.h
};
f.h
Compilation de g.c => error : redefinition of ’struct S’
#ifndef F_H
Solution :
#define F_H
utilisation d’une constante F_H struct S {
qui sert de verrou booleen
int i;
int j;
=> tous les fichiers .h doivent };
ainsi être construits !! #endif
89/90
Intro Variables Instructions Fonctions Expressions Pointeurs Fonc/Pointeurs Classes Mémo Structures Entrées/Sorties Prép
Le préprocesseur (Annexe A)
# ifdef S O L A R I S
code pour s o l a r i s
# endif
# ifdef LINUX
code pour linux
# endif
90/90