Formation C débutant
Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier compréhensible et executable par l'OS et la machine
Hello World #include 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 ) 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 : à unsigned short int, unsigned short : 0 à (long) int, signed (long) int : à unsigned (long) int : 0 à 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[taille1][...][tailleN]; exemples: int i; int j = 12; char char1, char2= '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 } int carre( int x) { return( x * x ); } exemples void affiche(int i) { int ne_sert_a_rien; printf( "i vaut %d\n", i); }
Exemple #include 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 : %d\n", i ); return 0; }
Structures conditionnelles if( condition ) { instructions si vrai } else { instruction si faux } switch( valeur ou variable ) { case( valeur1 ): instructions break; case( valeur2 ): 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 int main(void) { int i; for( i = 0; i < 12; i++ ) { printf( "i vaut %d\n", 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 %d\n", i ); i = i + 1; } int i = 42; do { /* executé qu'une fois */ printf( "i vaut %d\n", i); i = i +1; } while( i < 12 )
Comparaison de while et for int i; for( i =2; i < 12 ; i++ ) { printf( "i vaut %d\n", i ); } int i; i = 2; while( i < 12 ) { printf( "i vaut %d\n", i ); i++; }
Notion de pointeur Variable " i " Variable " j " NULLPointeur " p " int i = 12, j = 42, * p = NULL; (rien)
Notion de pointeur Variable " i " Variable " j " Adresse(j) Pointeur " p " p = &j;
Notion de pointeur Variable " i " Variable " j " 12 2 Adresse(j) Pointeur " p " *p = 2;
Exemples void echange( int *p_x, int *p_y ) { int tmp; tmp = *p_x; *p_x = *p_y; *p_y = tmp; } int a,b; echange( &a, &b ); void echange( int x, int y ) { int tmp; tmp = x; x = y; y = tmp; } 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 pt1, pt2, *p_pt3; pt1.x = 12; pt1.y = 42; pt2 = pt1; p_pt3 = &pt1; p_pt3->x = 0; p_pt3->y = pt2.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 u1; u1.f = 1.2; /* affiche le motif en hexadecimal de 1.2 */ printf( "%f donne 0x%x\n", u1.f, u1.i ); en memoire on a int i u1float f
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 p1; point_t p2;
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 source.c divers.c source.o divers.o executable compilation éditions des liens