La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

ECP – Option SA Henri Fallon

Présentations similaires


Présentation au sujet: "ECP – Option SA Henri Fallon"— Transcription de la présentation:

1 ECP – Option SA Henri Fallon <henri.fallon@centraliens.net>
“Rappels” de C, la suite ECP – Option SA Henri Fallon

2 Macros « Instructions » de remplacement
sont interprétées avant le compilateur remplacement « textuel » exemples : #define PI #define CINQ (3+2)‏ #define BIZARRE ,12); printf("Pi vaut %f, Cinq vaut %d, et douze vaut %d\n", PI, CINQ BIZARRE printf("Pi vaut %f, Cinq vaut %d, et douze vaut %d\n", , (3+2) ,12);

3 Macro : danger #define CINQ 3+2 printf("3*5 vaut-il %d ?\n", 3*CINQ);
/* Correct */ #define CINQ (3+2)‏ #define FOIS_TROIS(x) (x*3)‏ printf("cinq fois trois vaut-il %d?\n",FOIS_TROIS(3+2)); printf("cinq fois trois vaut-il %d?\n",(3+2*3)); /* Correct */ #define FOIS_TROIS(x) ((x)*3)‏

4 Choix multiples Pour éviter les nombreux « if » « else »
switch( variable ) { case valeur_1: instructions_1; break; case valeur_2: instructions_juste_pour_2; /* que se passe-t-il si on ne met pas break ? */ case valeur_3: instructions_pour_2_et_3; default : printf("Valeur inconnue"); }

5 Meilleur contrôle des boucles
Sortir d'une boucle : break int i=0; while(1) { printf("trois fois en tout\n"); if( ++i > 3 )‏ break; } /* Nous venons de réinventer la boucle "for" */ Passer à l'éxécution suivante : continue int i; for( i=-5; i<6; i++ ) { /* Evitons la division par zéro */ if( !i )‏ continue; printf( "100/%d = %d\n", i, 100/i ); }

6 Les structures Permettent de clarifier le code en stockant dans une seule variable un ensemble de variables struct rectangle { unsigned int longueur; unsigned int largeur; } r; r.longueur = 12; r.largeur = 42; printf("L'aire de r est %d\n", r.longueur * r.largeur );

7 Les structures (2)‏ Lourdeur des déclaration : struct rectangle {
unsigned int longueur; unsigned int largeur; } r; struct rectangle r2; r.longueur = 12; r.largeur = 42; r2=r; printf("L'aire de r est %d\n", r.longueur * r.largeur );

8 Definir ses types instruction typedef typedef int mytype_int;
typedef struct _rectangle { unsigned int longueur; unsigned int largeur; } rectangle; rectangle r; r.longueur = 12; r.largeur = 42; printf("L'aire de r est %d\n", r.longueur * r.largeur );

9 La memoire Variable dans les fonctions La fonction malloc
dites « automatiques » allouées au début de la fonction automatiquement désallouées à la fin La fonction malloc permet d'allouer un « morceau » de memoire qui persiste même après le retour de la fonction ne la libère pas automatiquement : risque de « fuite memoire »

10 Variables automatiques : le piège
char * chaine( void ) { char c[]= "chaine de retour"; return c; } /* ce programme va planter ! */ int main(void) { char * test; test = chaine(); printf("%s\n", test ); return 0;

11 malloc : allocation dynamique
char * chaine( void ) { char * c; c = (char *)malloc( 5 * sizeof(char) ); return c; } /* ce programme va fonctionner ! */ int main( void ) { char * test; test = chaine(); printf("%s\n", test ); return 0;

12 libération La memoire allouée reste allouée !
Possibilité de « perdre » le pointeur : memory leak La fonction free /* ce programme va fonctionner ! */ int main( void ) { char * test; test = chaine(); printf("%s\n", test ); free(test); return 0; }

13 ré-allocation fonction realloc même retour que malloc

14 Bonnes pratiques tester le retour de malloc
toujours libérer la memoire dès que possible lire le manuel des fonctions : allouent-elles la memoire ou doit-on l'allouer avant ? utiliser sizeof if( (p=malloc( taille * sizeof( int ) ) == NULL ) { printf("Erreur d'allocation\n"); return -1; } p[0] = 12; /* .... */

15 Les cast (transtypage)‏
Conversion explicite d'un type à un autre Attentions aux casts implicites ! unsigned int positif = 10; int negatif = -12; if( positif < negatif ) { printf("ah ben bravo l'implicite"); } if( negatif < (int)positif ) { printf("Il faut tout faire soi-même"); }ᄇ

16 A la pratique !


Télécharger ppt "ECP – Option SA Henri Fallon"

Présentations similaires


Annonces Google