Formation C dbutant Notion de compilation Phase de
Formation C débutant
Notion de compilation Phase de compilation source. c Fichier de texte brut, inexploitable directement par la machine executable Fichier compréhensible et executable par l'OS et la machine
Hello World #include <stdio. h> int main(void) { /* affiche le fameux Hello World ! */ printf("Hello World !n"); return( 0 ); }
Structure d'un programme C Un programme contient : ● ● ● ● des directives du préprocesseur : inclusion de librairies (#include <stdio. h>) des définitions de types : typedef int MON_INT des variables: int i = 0; des fonctions (comme main) des commentaires : /* mes commentaires */ des boucles, des structures conditionnelles (if, for, while, switch) des appels de fonctions : fonction_a_moi( 12, 42 ) des opérations : i = 12 * j + 42;
Type de bases type caractères: ●char, signed char : -128 à 127 ●unsigned char : 0 à 255 ● types entiers: ●short int, short, signed short int : -32768 à 32767 ●unsigned short int, unsigned short : 0 à 65535 ●(long) int, signed (long) int : -2147483648 à 2147483647 ●unsigned (long) int : 0 à 4294967295 ● type à virgule flottante: ●float ●double ●long double ●
Variables et tableaux type nom_de_variable; type nom_de_variable = valeur; type nom_de_tableau[taille du tableau]; type nom_de_tableau[taille 1][. . . ][taille. N]; exemples: int i; int j = 12; char 1, char 2= 'a'; float point[3]; point[0] = 2. 0; point[1] = 12. 0; point[3] = 42. 0;
Fonctions type nom_de_fonction( paramètres ) { variables locales du code C } exemples int carre( int x) { return( x * x ); } void affiche(int i) { int ne_sert_a_rien; printf( "i vaut %dn", i); }
Exemple #include <stdio. h> int carre( int x ) { return( x * x ); /* retourne le carre de x */ } int main(void) { int i, j = 12; i = carre( j ); printf( "j² vaut : %dn", i ); return 0; }
Structures conditionnelles if( condition ) { instructions si vrai } else { instruction si faux } switch( valeur ou variable ) { case( valeur 1 ): instructions break; case( valeur 2 ): instructions break; default: instructions } Remarque : à la place de if. . . else. . . on peut parfois utiliser : ( condition ) ? instruction si vrai : instruction si faux
Structures de boucle while( condition ) { instructions } do { instructions } while( condition ); for( instruction ; condition; instruction ) { instructions }
Exemple #include <stdio. h> int main(void) { int i; for( i = 0; i < 12; i++ ) { printf( "i vaut %dn", i ); } return 0; }
Break et continue ● ● break : permet de sortir d'une boucle continue : va directement à l'itération suivante
Comparaison de while et do while int i = 42; while( i < 12 ) { /* jamais exécuté */ printf( "i vaut %dn", i ); i = i + 1; } do { /* executé qu'une fois */ printf( "i vaut %dn", i); i = i +1; } while( i < 12 )
Comparaison de while et for int i; for( i =2; i < 12 ; i++ ) { printf( "i vaut %dn", i ); } i = 2; while( i < 12 ) { printf( "i vaut %dn", i ); i++; }
Notion de pointeur Pointeur " p " NULL int i = 12, j = 42, * p = NULL; Variable " i " 12 Variable " j " 42 (rien)
Notion de pointeur Pointeur " p " Adresse(j) p = &j; Variable " i " 12 Variable " j " 42
Notion de pointeur Pointeur " p " Adresse(j) *p = 2; Variable " i " 12 Variable " j " 2
Exemples void echange( int x, int y ) { int tmp; void echange( int *p_x, int *p_y ) { int tmp; tmp = x; x = y; y = tmp; tmp = *p_x; *p_x = *p_y; *p_y = tmp; } } int a, b; echange( a, b ); int a, b; echange( &a, &b );
Type "structure" struct nom_de_la_structure { champs de la structure } exemple: struct point_s { int x, y; } struct point_s pt 1, pt 2, *p_pt 3; pt 1. x = 12; pt 1. y = 42; pt 2 = pt 1; p_pt 3 = &pt 1; p_pt 3 ->x = 0; p_pt 3 ->y = pt 2. y;
Type "union" union nom_de_l_union { champs de l'union } ex: union mon_union_u { float f; int i; } union mon_union_u u 1; u 1. f = 1. 2; /* affiche le motif en hexadecimal de 1. 2 */ printf( "%f donne 0 x%xn", u 1. f, u 1. i ); en memoire on a
Définition de types personnalisés typedef type_existant nouveau_type; exemple: typedef int MON_INT; typedef struct point_s { int x, y; } point_t; Ansi on peut écrire: struct point_s p 1; point_t p 2;
Opérateurs arithmétiques ●+, -, *, /, %, ●++, -●=, +=, -=, *=, . . ● logiques ●||, &&, ! ● travaillant au niveaux binaire ●&, |, ~, <<, >> ● de comparaison ●<, <=, >, >=, ==, != ●
Complément - malloc/free Allouer/désallouer dynamiquement des variables/zones mémoires. typedef struct point_s { int x, y; } point_t; point_t *p_pt; /* p_pt n'est pas directement utilisable */ p_pt = malloc( sizeof( point_t ) ); p_pt->x = 2; . . . free( p_pt );
Complément - malloc/free "Tableaux dynamiques" int i int *tab; tab = calloc( 1242, sizeof( int ) ); for( i = 0; i < 1242; i++ ) { tab[i] = 2*i; /* 1242 premiers nombres pairs */ /* on peut aussi écrire: *(tab+i) = 2*i */ } free( tab );
Complément - Compilation compilation source. c divers. c éditions des liens source. o divers. o executable
- Slides: 25