formation c débutant. notion de compilation source.c executable phase de compilation fichier de...
TRANSCRIPT
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 <stdio.h>
int main(void){ /* affiche le fameux Hello World ! */ printf("Hello World !\n");
return( 0 );}
Structure d'un programme CUn 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[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 <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 : %d\n", i ); return 0;}
Structures conditionnellesif( 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 <stdio.h>
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 "
12
42
NULLPointeur " p "
int i = 12, j = 42, * p = NULL;
(rien)
Notion de pointeur
Variable " i "
Variable " j "
12
42
Adresse(j)Pointeur " p "
p = &j;
Notion de pointeur
Variable " i "
Variable " j "
12
2
Adresse(j)Pointeur " p "
*p = 2;
Exemplesvoid 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 iu1float f
Définition de types personnaliséstypedef 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/freeAllouer/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 iint *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