Cfacile.pdf

54
C Facile Valentin Roussellet (p2010) - [email protected] Introduction C Facile : les bases Hello, World ! Les variables : rien à déclarer ? Apprendre à lire (et écrire) Les structures de contrôle Un programme multi-fonctions Tableaux de maîtres C plus dur : les données et la mémoire L’homme, les pointeurs et les variables Les pointeurs : la tête dans les étoiles ! Les unions font la force ! Gérer la mémoire, ça fait malloc Tu tire où tu pointes : les pointeurs de fonctions C balaize : devenir un pro du C La dure vie des variables Le préprocesseur est (aussi) notre ami Sociologie des programmes Ta mère en string dans la lib standard ! C Facile Le langage C Valentin Roussellet (p2010) - [email protected] Centrale Réseaux Mardi 15 décembre 2009

Transcript of Cfacile.pdf

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    C FacileLe langage C

    Valentin Roussellet (p2010) - [email protected]

    Centrale Rseaux

    Mardi 15 dcembre 2009

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Sommaire

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programme multi-fonctionsTableaux de matres

    C plus dur : les donnes et la mmoireLhomme, les pointeurs et les variablesLes pointeurs : la tte dans les toiles !Les unions font la force !Grer la mmoire, a fait mallocTu tire o tu pointes : les pointeurs de fonctions

    C balaize : devenir un pro du CLa dure vie des variablesLe prprocesseur est (aussi) notre amiSociologie des programmesTa mre en string dans la lib standard !

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    C quoi ?

    Le C est un langage de programmation cr en 1974, pourcrire le systme dexploitation UNIX. Depuis,il est devenu(avec ses variantes), le langage le plus utilis. Le C alavantage dtre :I lgerI concisI bas niveauI portableI haut niveau

    Le C est un langage compil, ce qui lui permet dtre trsperformant.

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Compiler un programme

    Plus facile utiliser sur un UNIX (Linux, MacOSX) :I On crit son programme avec son diteur prfrI La compilation se fait en ligne de commande avec

    gcc 1 : gcc monfichier.c -o monprogSous Windows, il faut installer un IDE comme Visual Studioou Code : :Blocks.

    1. GNU C Compiler/ GNU Compiler Collection

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Au programme :

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programme multi-fonctionsTableaux de matres

    C plus dur : les donnes et la mmoireLhomme, les pointeurs et les variablesLes pointeurs : la tte dans les toiles !Les unions font la force !Grer la mmoire, a fait mallocTu tire o tu pointes : les pointeurs de fonctions

    C balaize : devenir un pro du CLa dure vie des variablesLe prprocesseur est (aussi) notre amiSociologie des programmesTa mre en string dans la lib standard !

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Notre premier programme en C

    1 #include 2 int main(int argc, char** argv) {3 printf("Hello, World!\\n");4 return 0;5 }

    I Les instructions se terminent par un point-virguleI Les blocs dinstructions sont encadrs par des accoladesI Les commentaires sont encadrs par /* et */I Les commentaires courts commencent par //

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Notre premier programme en C

    1 #include 2 int main(int argc, char** argv) {3 /* Voici un commentaire sur plusieurs lignes4 qui se continue ici : notre prermier programme en C */5 printf("Hello, World!\n"); // On affiche du texte6 return 0;7 }

    Compilez et excutez le programme hello.c ; cest trop ouf,hein !

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les variablesLes variables en C sont types et il faut les dclarer aucompilateur. Il existe plusieurs types de base :I Caractre : charI Nombre entier : int (integer)I Nombre dcimal : float (floating-point)I Nombre dcimal en double prcision : double

    1 /* Dclarations */2 char c;3 int i;4 float f;5 /* Affectation */6 c=c;7 i=42;8 f=3.4159;

    La dclaration permet au programme de rserver de lammoire pour y stocker la variable.

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les types

    On peut varier les types grce des mots-clefs :signed/unsigned, short/long et double

    type signification octets Plage de valeurs(signed)char caractre 1 -128 127unsigned char caractre non sign 1 0 255

    short int entier court 2 -32 768 32 767unsigned short int entier court non sign 2 0 65 535

    int entier 4 -2 147 48 3648 2 147 483 647unsigned int entier non sign 4 0 4 294 967 295long int entier long 4 -2 147 48 3648 2 147 483 645

    unsigned long int entier long non sign 4 0 4 294 967 295float nombre virgule flottante 4 3.4 1038 3.4 1038double nombre en double prcision 8 3.4 10138 3.4 10138

    long long int entier long tendu 8 -9 223 372 036 854 775 807 9 223 372 036 854 775 807

    unsigned long long int entier long tendu 8 0 18 446 744 073 709 551 615long double nombre en double 10 3.4 1049323.4 104932

    prcision tendu

    I Gnralement, signed est implicite : un int est en fait un signed int.I Gnralement, un int fait 4 octets ; parfois (sur certaines architectures) seulement 2.I On peut omettre int et crire directement short, long ou long long

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Utilisons les variables

    1 /* On peut dclarer plusieurs variables dun coup */2 int i , j , k , n;3 /* Dclaration + Affectation = Initialisation*/4 char c=c;5 float f, g=0.001,h;6 /*Les oprations arithmtiques */7 i = 3 ; j = 4 ;8 k = (i + (j * (i - n))) ;// attention aux priorits9 k = i / j ; // = 0 (division entire)

    10 /*Les affectations combines */11 k += i ; // quivaut k = k+i12 k *= j ; // quivaut k = k*i13 k++; // quivaut k+=1;

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Prcautions prendre

    Une variable non initialise a une valeur alatoire ! 1 int i = 3, j = 4 ;2 float f = 0.42 , g = 1.2 ;3 g = i + f ;// conversion implicite4 g = (float) i / (float) j ; // conversion explicite5 /* on parle aussi de cast ou de transtypage */

    Attention la priorit des oprateurs et leur ordredvaluation. Parfois le rsultat nest pas dfini (exemple :i++ = i++;)

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Utiliser printf

    Printf permet dafficher du texte lcran. 1 #include // ncssaire pour utiliser printf2 int main (int argc, char** argv ) {3 int i = 0, j = 3;4 printf("j vaut %d et i vaut %d\n",j,i)5 }

    On utilise %* pour afficher une variable%d pour afficher sous la forme dun entier%f pour addicher sous la forme dun flottant%c pour afficher sous la forme dun caractre

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Lire et crire

    On peut rcuprer un caractre de lentre avec getchar() 1 #include 2 /* ce programme affiche lcran ce quon frappe au clavier */3 int main (int argc, char** argv ) {4 char c;5 c = getchar();6 while (c != EOF) {7 printf("%c",c);8 c = getchar();9 }

    10 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Conditions et valeur dune expression

    Les instructions sont values, cest dire quelles ont unevaleur.

    1 int a,b;2 a=(b=3);

    Toute valeur nulle est fausse. Les autres valeurs sontvraies. Pour spcifier des conditions on utilise :I Les oprateurs de comparaison sont ==, !=,

    ,

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les instructions if / else

    I Les structures de contrle : accolades (obligatoire) etindentation (cest plus lisible)

    I Les structure de choix : if, if/else ou if/else if/.../else. 1 if (i==3 && j < 3) {2 // instructions3 } else if (isNormal(k)) {4 // instructions5 } else {6 // instructions7 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    La boucle for

    1 int i ;2 for (i = 0 ; i < 100 ; i++) {3 // instructions4 }

    Les 3 instructions sont arbitraires :I La premire est effectue une seule fois,I La 2eme est effectue au dbut de chaque itration. Si

    sa valeur est nulle la boucle sarrteI La 3eme est effectue au dbut de chaque itration.

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    La boucle whileI Les boucles while et for sont interchangeables (en

    thorie).I Le mot-clef break permet de quitter la boucle.

    1 int i ;2 while (i != 0) {3 // instructions4 if (erreur) {5 break;6 }7 } 1 #include 2 int main(int argc, char** argv) {3 char c;4 while ((c=getchar())!=EOF) {5 printf("%c",c);6 }7 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Fonctions et variables

    1 #include 2 int f(int x) {3 int b=42;4 return x+42;5 }67 int main (int argc char** argv) {8 int a=3;9 int b;

    10 b=f(a);11 printf("%d",b)12 }

    Les variables sont locales un bloc et nexistent pas lextrieur.

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Prototypes et fonctions

    I Comme les variables, les fonctions sont dclares avec letype de leur valeur de retour et leurs arguments(prototype)

    I Le type void est utilis pour les fonctions sansparamtre ou qui ne retournent rien.

    1 int fonction1(int param1, float param2);2 float fonction2(double, unsigned char);3 void fonction3 (int);4 char fonction4(void);

    I On ne peut pas dclarer une fonction dans une autrefonction

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les fonctions : quelques dtailsI Les fonctions peuvent tre rcursives

    1 int factorielle(int n) {2 if (n == 1 || n == 0) {3 return 1;4 } else {5 return n * factorielle(n-1);6 }7 }

    I Les arguments peuvent subir une conversion impliciteI Une erreur de compilation se produit si un cast est

    requis 1 double carre(double l){2 return l*l3 }4 // ... plus tard, dans le main ...5 int a = 3;6 carre(a); // a est converti en double

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Tableaux de matres

    I Un tableau est une suite de variables de mme type. 1 int a[10]; /* cre un tableau de 10 entiers2 on y accde par a[0], a[1] ... a [9] */3 a[4] = 42 ;4 int b[4] = {12 , 3 , 4 , 17} ; // initialise le tableau

    I Une chane est en fait un tableau de char !I Mais attention au \0 final !

    1 char s[5]; // cre un tableau de 5 char2 s = "plop";3 // s contient p,l,o,p,\04 s = "meh";5 // s contient m,e,h,\0 , une valeur inconnue

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Au programme :

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programme multi-fonctionsTableaux de matres

    C plus dur : les donnes et la mmoireLhomme, les pointeurs et les variablesLes pointeurs : la tte dans les toiles !Les unions font la force !Grer la mmoire, a fait mallocTu tire o tu pointes : les pointeurs de fonctions

    C balaize : devenir un pro du CLa dure vie des variablesLe prprocesseur est (aussi) notre amiSociologie des programmesTa mre en string dans la lib standard !

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Quest ce que la mmoire

    I La mmoire est un grand tableau numrot.I Chaque case fait 1 octet.

    ... 2453 2454 2455 2456 2457 ...I Dclarer une variable lui rserve une place en mmoire

    1 unsigned int a; // les blocs 2454 2457 sont rservs pour a2 a = 1027 ;

    I Maintenant la mmoire ressemble a :00000000 00000000 00000010 0000011

    ... 2454 2455 2456 2457 ...

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Quest ce quun pointeur ?

    I Loprateur & donne ladresse dune variable 1 printf("%d",&a) ; // affiche ladresse de a

    I Un pointeur est une variable qui contient ladressedune autre variable.

    1 p = &a ; // p pointe sur a I Loprateur inverse est * (drfrencement)I *p peut tre utilis la place de a nimporte o

    1 a = 3 ; p = &a ;2 *p += 40 ;// a vaut maintenant 423 b = f(*p) ;// 42 est pass en argument de f

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Un peu plus prs des *

    I Les pointeurs doivent tre dclars en fonction du typede la variable sur laquelle ils pointent

    1 int a ; double b ; unsigned char c ;2 int * pa; // un pointeur sur int3 double * pb = &b; //initialisation4 unsigned char * pc = NULL ; // pointeur nul

    I Pointeur non initialis = DANGER ! 1 //attention aux dclarations multiples2 int *p ,*q ;// p et q sont des int* ;

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Exemple : le passage par rfrence

    Ce que je veux : une fonction swap(a,b) qui change a et b. 1 void swap(int * pa,int * pb) {2 int c = *pa;3 *pa = *pb;4 *pb = c;5 }6 // ... plus tard ...7 int a = 12, b = 42 ;8 swap(&a,&b);9 /* maintenant a vaut 42 et b 12 */

    I Meilleures performances quand on passe de grossesdones

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les pointeurs et les tableaux

    Les pointeurs et les tableaux sont trs lis ! Un exemple : 1 short[10] a ;2 short * p = &(a[0]) ;3 int i;4 for (i = 0 ; i

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Application : les chanes de caractres

    Une chane de caractre peut tre reprsente par un char*Un exemple :

    1 char* str = "Une chaine de caracteres";2 void stringCopy(char * src, char * dest);3 while( (*dest = *src) != \0) {4 dest++;5 src++;6 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les pointeurs gnriques

    I On utilise le type void* pour reprsenter un pointeurgnrique.

    I Il est compt comme un pointeur sur un objet de 1octet pour larithmtique

    I Il faut le caster pour sen servirI Son usage : limiter

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Attention aux pointeurs !

    I On ne peut pas lire ou crire nimporte o dans lammoire !

    I Dans le meilleur des cas : segmentation faultI Dans le pire des cas : donnes corrompuesI Attention aux casts foireux.

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les structures

    I Une structure est un rassemblement de plusieursvariables

    I Les variables peuvent tre de type diffrents 1 // dclaration de la structure2 struct Pays {3 char* nom;4 long nbHabitants;5 double superficie6 }7 // dclaration dune instance de la structure8 struct Pays monpays;9 // initialisation;

    10 monpays = {"France",60000000,675417}11 //accs une valeur12 printf(monpays.nom);13 printf(" : un pays de %d habitants",monpays.nbHabitants);

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les pointeurs de structure 1 void naissance(struct Pays * unpays){2 // attention aux parentheses3 (*unpPays).nbHabitants++;4 }

    I On peut crire a->b au lieu de (*a).bI On peut faire un typedef pour clarifier les choses

    1 // on dfinit un nouveau type Pays2 typedef struct pays Pays;3 //accs une valeur4 Pays monpays = {"Italie",60000000,300000};56 void naissance(pays * unpays){7 pays->nbHabitants++;8 }9 // on peut aussi faire un tableau de structures

    10 pays Monde[194];11 //... et utiliser larithmtique des pointeurs12 pays * p = Monde[0];13 for(i=0 ; i nom);15 p++;16 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les unionsI Une union est une variable qui peut prendre des valeurs

    de types diffrentsI Bien sr pas en mme temps !I La syntaxe ressemble celle des structures

    1 // on dfinit lunion Nombre et un alias de type2 typedef union {3 int vali;4 float valf;5 } Nombre ;67 nombre ajouter(Nombre a, Nombre b, char type) {8 nombre result;9 if (type == i) {

    10 result.vali = a.vali + b.vali ;11 return result ;12 } else if ( type == f) {13 result.valf = a.valf + b + valf;14 return result;15 } else {16 printf("Erreur !\n");17 return 018 }19 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Un exemple

    I On veut grer une base de donnes de personnesI Une premire approche :

    1 typedef struct Personne { //...2 } Personne ;3 Personne maBase[10000];4 int taille = 0;5 //...6 void add(Personne[] base, Personne * unePersonne ,int * taille) {7 if (*taille < 10000) {8 base[*taille] = *unePersonne;9 *taille++;

    10 }11 }

    I Ce nest pas trs pratique ...I On consomme beaucoup de mmoire pour rien

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Malloc entre en jeu : lallocation dynamiqueI On demande autant de mmoire quon en a besoin avecmalloc

    I On noublie pas de la librer quand on a plus besoinavec free

    1 #include 2 typedef struct Personne { //...3 Personne * next ; // on va crer une liste chane4 } Personne ;5 Personne** maListe = NULL ;67 int add(Personne** liste, Personne unePersonne);8 Personne *p = (Personne *) malloc(sizeof(Personne));9 // on demande de la mmoire pour une personne

    10 if (p == NULL) { // Il faut toujours faire a11 printf("Ooops !");12 exit(0) ;13 } else {14 p->next = *liste ;15 *liste = p ;16 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les pointeurs de fonctionsI Les fonctions ne sont pas des variables, mais on peut

    quand mme crer des pointeurs de fonction.I Attention la priorit entre * et () ;

    1 void tri1(int* uneliste) {2 // ...3 }45 void tri2(int* uneliste) {6 //...7 }89 void triListe(int* uneliste, void ( *fonction () ) ) {

    10 (*fonction)(uneliste)11 }12 //... dans le main13 if( typetri == 1){14 triListe(maliste, &tri1)15 } else {16 triListe(maliste, &tri2)17 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Au programme :

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programme multi-fonctionsTableaux de matres

    C plus dur : les donnes et la mmoireLhomme, les pointeurs et les variablesLes pointeurs : la tte dans les toiles !Les unions font la force !Grer la mmoire, a fait mallocTu tire o tu pointes : les pointeurs de fonctions

    C balaize : devenir un pro du CLa dure vie des variablesLe prprocesseur est (aussi) notre amiSociologie des programmesTa mre en string dans la lib standard !

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    La porteI La porte (scope) dune variable est lendroit du code

    o elles sont dfinies. Par dfaut, les variables sontlocales leur bloc.

    1 int f(int a,int b) {2 int c = a * b;3 // la porte de c va jusqu la fin de la fonction4 }56 int main (int argc, char** argv) {7 double c ; // ce nest pas le mme c !8 int i ;9 for (i = 0 ; i

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les variables globalesI On peut dclarer une variable lextrieur de tout bloc,

    elle sera visible de tous. 1 int nbAppel = 0;2 int fonction1(int a) {3 nbAppel++;4 // ...5 }6 int fonction2(int a) {7 nbAppel++;8 // ...9 }

    10 int main(int argc, char ** argv) {11 int i;12 for (i = 0 ; i 666) {16 break;17 }18 }19 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    ConstantesI On peut dclarer une variable constante laide du mot

    clef const.I Cela permet dviter certaines erreurs (mais on peut

    sen passer) 1 const int a=3;2 // ...3 a = 42 ; // ERREUR la compilation

    I Une fonction peut dclarer attendre des argumentsconstants.

    I Dans ce cas, on est sr que la fonction ne modifie paslobjet

    1 void fonction1(const char* chaine1, char* chaine2) {2 // cette fonction ne modifie pas chaine13 }

    I Bien sr cel nest utile que lorsquon passe despointeurs !

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Pointeurs et constantes

    I Attention la syntaxe ! 1 const char * p;2 // p est un pointeur sur un (const char)3 char c ; p = &c ; // OK4 *p = a ; // ERREUR : *p ne peut tre modifi 1 char * const p ;2 // p est un pointeur constant sur un char3 char c ; p = &c ; // ERREUR : p ne peut tre modifi4 *p = a ; // OK 1 const char * const p ;2 // p est un pointeur constant sur un const char3 char c ; p = &c ; // ERREUR4 *p = a ; // ERREUR

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les directives de prprocesseur

    I Le prprocesseur agit avant le compilateurI Ses commandes commencent par un #I Nous en avons rencontr une : #include#include Inclut un fichier en entier#define Effectue un remplacement

    #if/#endif Compilation conditionelle#pragma Directive spcifique au compilateur (cest mal)

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    #define et les macros

    Exemple de constante : 1 #define PI 3.14159

    Exemple de macro : 1 #define ABS(a) (a>0 ? a : -a )

    Attention aux parenthses ! 1 #define CARRE(a) a*a2 // ...3 CARRE(a+1);4 // equivaut a+1*a+1 = 2a + 1 !

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    #if : compilation conditionelle

    1 #include stdio.h2 int main(int argc, char ** argv) {3 #if WIN324 printf("Hello, Windows World\n");5 #else6 printf("Hello, World\n");7 }8 #endif

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    #include et les headersI On regroupe souvent les dclarations de fonctions dans

    un fichier spar appel header 1 // fichier main.h2 #ifndef MAIN_H // ceci permet de ninclure quune seule fois le

    fichier3 typedef struct Cercle {4 double rayon;5 int centre[2];6 } Cercle;7 double aire(Cercle *);8 #define PI 3,141599 #endif 1 // fichier main.c2 #include "main.h"3 int main(int argc, char** argv) {4 Cercle C;5 double a = aire(&C);6 }78 double aire(Cercle * unCercle) {9 return PI * (unCercle->rayon) * (unCercle->rayon) ;

    10 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Un programme, plusieurs fichiers

    I Quand un programme devient trop grand, on le spareen plusieurs fichiers.

    I Un fichier contient la fonction main, et dautres desfonctions annexes

    I Du coup, on groupe les dclarations dans un ouplusieurs headers

    I Ldition des liens permet de crer un programmefonctionnel

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Un schma pour mieux comprendre

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les bibliothques

    I On utilise souvent des bibliothques.I Elles sont statiques (lies la compilation) ou

    dynamiques (lies juste avant lexcution)I Exemple : la lib standard (dont fait partie printf)

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Un autre schma

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les variables statiquesI Le mot clef static a plusieurs emplois.I Une variable statique survit la fin de son blocI Un fichier agit comme un bloc pour la porte (pas

    daccs en dehors du fichier)I Les variables statiques sont initialises 0 par dfaut

    Exemple : Variable globale statique : 1 static int a = 3;2 static const char ch = c ;3 int main (int argc, char** argv) {4 // on peut utiliser a et ch partout dans le fichier5 // mais pas ailleurs6 }

    Exemple : Variable de fonction statique 1 int mafonction(int param1, double param2) {2 static int nbAppels;3 // faire des trucs4 nbAppels++;5 printf("Jai t appele %d fois \n",nbAppels);6 }

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les variables externes

    I extern sert pour les variables globalesI On utilise extern quand la variable est dfinie dans un

    autre fichierI Dans la pratique on utilise surtout un header pour les

    variables globales

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    La bibliothque stantard

    I Jai la flemme de faire cette slideI stdio.h, string.f, stdlib.h, limits.h, ...

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Les trucs dont je nai pas parl

    I Les branchements avec switchI Les numrationsI Les mots-clef volatile et registerI Plein dautres trucs que joublie

  • C Facile

    Valentin Roussellet(p2010) -

    [email protected]

    Introduction

    C Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programmemulti-fonctionsTableaux de matres

    C plus dur : lesdonnes et lammoireLhomme, les pointeurs etles variablesLes pointeurs : la tte dansles toiles !Les unions font la force !Grer la mmoire, a faitmallocTu tire o tu pointes : lespointeurs de fonctions

    C balaize : devenirun pro du CLa dure vie des variablesLe prprocesseur est (aussi)notre amiSociologie des programmesTa mre en string dans lalib standard !

    C parti !

    Cest fini... ou pas

    vous de jouer !I Lire le K&RI Visiter le site du zroI Lire du codeI Coder en C !

    IntroductionC Facile : les basesHello, World !Les variables : rien dclarer ?Apprendre lire (et crire)Les structures de contrleUn programme multi-fonctionsTableaux de matres

    C plus dur : les donnes et la mmoireL'homme, les pointeurs et les variablesLes pointeurs : la tte dans les toiles !Les unions font la force !Grer la mmoire, a fait mallocTu tire o tu pointes : les pointeurs de fonctions

    C balaize : devenir un pro du CLa dure vie des variablesLe prprocesseur est (aussi) notre amiSociologie des programmesTa mre en string dans la lib standard !

    C parti !