Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de...

Preview:

Citation preview

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