45
Introduction au C/C++ Introduction au C/C++ Cours 1 Rémi Watrigant (fortement inspiré du cours de V. Boudet, P. Giorgi et M. Joab de l’Université Montpellier 2) Université de Nîmes 2013-2014

Introduction au C/C++

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction au C/C++

Introduction au C/C++

Introduction au C/C++Cours 1

Rémi Watrigant(fortement inspiré du cours de V. Boudet, P. Giorgi et M. Joab

de l’Université Montpellier 2)

Université de Nîmes

2013-2014

Page 2: Introduction au C/C++

Introduction au C/C++

Présentation du module

Plan

1 Présentation du module

2 Présentation du langage C

Page 3: Introduction au C/C++

Introduction au C/C++

Présentation du module

Prévision d’organisation :des cours

des (TD) TP, dont 2 ou 3 notés (note de contrôle continu)1 partiel (+ 1 rattrapage...)

Page 4: Introduction au C/C++

Introduction au C/C++

Présentation du module

Evaluation :1 note de contrôle continu (moyenne des 2 ou 3 TP notés)1 note d’examen terminal

Note finale (à priori) :

0.3 ú CC + 0.6 ú Exam

Page 5: Introduction au C/C++

Introduction au C/C++

Présentation du module

Objectifs :découvrir le langage Crevoir les principes de la programmation impérative(que vous avez déjà vu en Pascal...)les adapter au Cintroduction aux principes de l’orienté objet en C++

Page 6: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Plan

1 Présentation du module

2 Présentation du langage C

Page 7: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Pourquoi un langage haut niveau ?

Plan

2 Présentation du langage CPourquoi un langage haut niveau ?Programmation impérative ?Le langage CC et compilationLes erreursIDE : code::blocks

Page 8: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Pourquoi un langage haut niveau ?

assembleur : di�cile

Un ordinateur comprend un seul langage : l’assembleur.ExempleUn programme assembleur : exemple1.s

1 . g l o b l _main

2 _main :

3 p u s h l %ebp

4 movl %esp , %ebp

5 s u b l $24 , %esp

6 movl $10 , ≠12(%ebp )

7 l e a v e

8 r e t

9 . s u b s e c t i o n s _ v i a _ s y m b o l s

Page 9: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Pourquoi un langage haut niveau ?

Lisibilité

Mais cette langue est di�cile à apprendre pour nous.Il nous faut donc un langage intermédiaire entre la langue naturelleet l’assembleur : un langage de haut niveau.ExempleL’exemple équivalent en C : exemple1.c

1 i n t main ( )

2 {

3 i n t a ;

4 a=10;

5 }

Page 10: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Pourquoi un langage haut niveau ?

Portabilité

L’assembleur est propre à chaque famille de processeurs. Il nousfaudrait donc un programme di�érent sur chaque ordinateur. D’oùla nécessité de portabilité.On demandera donc à notre langage de haut niveau d’exister demanière identique sur toutes les architectures d’ordinateurs.

Page 11: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Plan

2 Présentation du langage CPourquoi un langage haut niveau ?Programmation impérative ?Le langage CC et compilationLes erreursIDE : code::blocks

Page 12: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Plusieurs paradigmes de langages de programmation

langages fonctionnels : CAML, LISPlangages impératifs : C, Pascal, Fortranlangages à objets : C++, JAVAlangages logiques : Prologlangages à balises : HtmlCertains ont plusieurs caractéristiques.

Page 13: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Quelles sont les di�érences ?

on ne programme pas de la même façon dans ces di�érentslangagesun programme écrit en CAML ne "fonctionne" pas en Cles concepts théoriques à la base des langages sont di�érentsEt pourtant, deux programmes écrits dans des langagesdi�érents peuvent rendre un même service à son utilisateur.

Page 14: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Pourquoi alors avoir plusieurs langages ?

il est parfois plus facile de programmer certains logiciels aveccertains langages et plus di�ciles avec d’autrescertains langages sont (pour certains usages)

plus "lents" que d’autresmoins "portables" que d’autres

parfois, nous n’avons pas le choix (intégration, utilisation debibliothèques).

Page 15: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Contenu d’un ordinateur

Entre autres choses, un ordinateur contient :

Une mémoireDes unités de calcul surles entiersDes unités de calcul surles réels

07/11/08 10:31Personal_computer,_exploded_5,_unlabeled.svg

Page 1 sur 1file:///Users/vincentboudet/Enseignement/2008/FLIN202/Personal_computer,_exploded_5,_unlabeled.svg

Page 16: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Mémoire d’un ordinateur

Comment est organisée la mémoire d’un ordinateur ?

Mémoire divisée en case (bit)Case identifiée par un numéro (adresse)

!"#"$%"&'()%**%+'

!"#$%&'()#*+,-,.(/%(0%1$%*#(/%(+2"1/,&*'%#13(+%(41"0%55%#1(4%16%'(/%(6*&,4#+%1(

%'(/%('1*,'%1(+%5(/"&&.%5()#,(+#,(5"&'(-"#1&,%57(!*(4#,55*&0%(*(#&%(,&-+#%&0%(5#1(+*(

$,'%55%(/2%8.0#',"&(/%($"5(+"9,0,%+5(%'(/%5("4.1*',"&5()#%($"#5(%--%0'#%:7

,"#"$-"./.(0'%"101%

;*1'%&*,1%(/%('1*$*,+(/#(

41"0%55%#13(+*(6.6",1%($,$%(

<*44%+.%(*#55,(234=(5'"0>%(

'%64"1*,1%6%&'(+%5(/"&&.%5(?(

'1*,'%1(4*1(+%(41"0%55%#17(@,&5,3(

4+#5(,+(A(*(/%(6.6",1%(/%(

/,54"&,B+%3(4+#5(,+(%5'(4"55,B+%(

/2A(0"&5%1$%1(/%5(/"&&.%5(

'%64"1*,1%6%&'(<0%()#,(.$,'%(

/2*00./%1(*#(/,5)#%(/#1()#,(%5'(

4+#5(+%&'=7

C*(6.6",1%($,$%(%5'($,/.%(?(0D*)#%(*11E'("#(1%/.6*11*9%(/%($"'1%("1/,&*'%#17

5"#"$%"60*7+%"6+'

F"&'1*,1%6%&'(?(+*(6.6",1%($,$%3(

+%5(/"&&.%5(5'"0>.%5(5#1(#&(

/,5)#%(/#1(5"&'(4%16*&%&'%5(%'(&%(

5"&'(4*5(%--*0.%5(?(+2*11E'(/%($"'1%(

"1/,&*'%#17(F2%5'(/"&0(5#1(#&(

/,5)#%(/#1()#%($"'1%(5A5'G6%(

/2%84+",'*',"&(<$08+93(4-):*("#(

;086(<*=3($"5(+"9,0,%+5(%'($"5(

/"0#6%&'5(5"&'(0"&5%1$.57(F2%5'(

/"&0(#&(%54*0%(/%(5'"0>*9%(

4%16*&%&'3("H($"#5(4"#$%:(0"4,%1(

%'(5#441,6%1(/%5(/"&&.%5(?(

$"+"&'.7

On peut donc voir la mémoire d’un ordinateur comme un tableau.

Page 17: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Mémoire d’un ordinateur

Comment est organisée la mémoire d’un ordinateur ?

A partir de maintenant, on représentera la mémoire d’unordinateur comme un grand tableau.

...

Page 18: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Contenu de la mémoire

La mémoire d’un ordinateur (comme tout composant électronique)ne possède que deux états : 0 ou 1.Tous les objets manipulés, des plus simples (booléens, entiers) auxplus complexes (un labyrinthe, une carte routière, un film) sonttraduits en 0 et en 1.ExempleLa représentation en mémoire de 63576473 est

00000011110010100001100110011001

celle de 3, 141592 peut-être

11001001000011111101101010100010001000010110100011000

Page 19: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Contenu de la mémoire

Que remarque-t-on sur les exemples précédents : la place enmémoire dépend de ce qu’on souhaite représenterPour tous les objets que nous manipulerons, il nous faudra préciserde quoi il s’agit : on parlera de typeLes types que nous détaillerons plus loin seront : int, float,double, char...

Page 20: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Contenu de la mémoire

Posons nous la question inverse : supposons que la mémoirecontienne les bits suivants :

00100001011011100110100101100110

On voudrait a�cher de manière lisible ce que cela représente.l’entier 560884070

le réel0.00000000000000000080777030249158803483825429248011les caractères "FIN !"

Lors de l’a�chage, il faudrait également préciser la nature desobjets : on parlera plus tard de format.

Page 21: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Contenu de la mémoire

Posons nous la question inverse : supposons que la mémoirecontienne les bits suivants :

00100001011011100110100101100110

On voudrait a�cher de manière lisible ce que cela représente.l’entier 560884070le réel0.00000000000000000080777030249158803483825429248011

les caractères "FIN !"Lors de l’a�chage, il faudrait également préciser la nature desobjets : on parlera plus tard de format.

Page 22: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Contenu de la mémoire

Posons nous la question inverse : supposons que la mémoirecontienne les bits suivants :

00100001011011100110100101100110

On voudrait a�cher de manière lisible ce que cela représente.l’entier 560884070le réel0.00000000000000000080777030249158803483825429248011les caractères "FIN !"

Lors de l’a�chage, il faudrait également préciser la nature desobjets : on parlera plus tard de format.

Page 23: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Programmation impérative ?

Programmation impérative

Le programmeur décrit dans son programme :ce que doit faire la machine "pas à pas"dans quel ordre le faire

Le programmeur dispose d’un certain nombre d’instructions pourdonner ses ordres à la machine :

des instructions de contrôles du déroulement du programmedes instructions de manipulations de la mémoire

en donnant un nom à une zone mémoire : variableen accédant directement à une case mémoire : pointeurpuis en modifiant ces objets par des a�ectations

Page 24: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Le langage C

Plan

2 Présentation du langage CPourquoi un langage haut niveau ?Programmation impérative ?Le langage CC et compilationLes erreursIDE : code::blocks

Page 25: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Le langage C

Histoire

apparu au cours de l’année 1972 dans les Laboratoires Belldéveloppé en même temps que Unix par Dennis Ritchie et KenThompsonEn 1989, normalisation du langage C par l’Institut nationalaméricain de normalisation (ANSI) ANSI C ou C89en 1990 norme également adoptée par l’Organisationinternationale de normalisation (C ISO)

Page 26: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Le langage C

Importance

la majorité des grands systèmes d’exploitation entre les années1975 et 1993 ont été développés en C.extrêmement utilisé dans des domaines comme

la programmation embarquée sur microcontrôleurs,les calculs intensifs,l’écriture de systèmes d’exploitationtous les modules où la rapidité de traitement est importante

a inspiré de nombreux langages récents : C++, Java,Javascript, PHP...

Page 27: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Le langage C

Exemple de programme CVoici un exemple de programme C écrit dans un éditeur de textequelconque.

Page 28: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

C et compilation

Plan

2 Présentation du langage CPourquoi un langage haut niveau ?Programmation impérative ?Le langage CC et compilationLes erreursIDE : code::blocks

Page 29: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

C et compilation

Le C : un langage compilé

Trois étapes avant d’avoir un programme utilisable :1 Ecrire le code source dans un éditeur de texte (fichier en

langage C)2 Compiler ce code source3 Executer le produit de la compilation qui est un programme

exécutable

Page 30: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

C et compilation

A quoi sert la compilation ?

Transformer un code source lisible par un être humain en unlangage exécutable par une machineLes programmes que vous écrirez ne sont pas directementexécutablesLe résultat de la compilation est soit :

un code exécutable...des messages d’erreurs (qu’il faut lire).

Page 31: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

C et compilation

A quoi sert la compilation (2) ?

La compilation sert à faire le lien entre votre programme etd’autres codes sources :

un programme peut être composé de plusieurs codes sourcesun programme peut utiliser des bibliothèques

bouts de programme déjà faitsréutilisation de vos programmes

Page 32: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

C et compilation

Un exemple de Compilation

Pour compiler l’exemple précédent (exemple1.c), on tape dans unterminal :Exemplegcc -Wall -o Exemple1 exemple1.c

Cette instruction compile mon programme C et crée un fichierexécutable nommé Exemple1.Pour tester le programme, on tape dans un terminalExemple./Exemple1

Page 33: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Plan

2 Présentation du langage CPourquoi un langage haut niveau ?Programmation impérative ?Le langage CC et compilationLes erreursIDE : code::blocks

Page 34: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Les erreurs

Très vaste sujet...Principalement, deux types d’erreurs :

Erreur de programmationErreur de conception

Parfois les deux en même temps

Page 35: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Erreurs de programmation

il su�t de réparer ces "erreurs" et de continuerexemples :

erreur de syntaxe (comme une faute d’orthographe)appeler une fonction qui n’existe pasmauvaise gestion de la mémoire (ex : accès à la case 1000 d’untableau de 5 cases)et encore pleins d’autres...

Page 36: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Erreurs de conceptions

le programme peut compiler mais ne pas donner le résultatvouluerreur dans l’élaboration de la méthodeexemples :

division par zéroboucle infiniepas du tout le résultat voulu (...)

∆ besoin de tests

Page 37: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Que fait le compilateur en cas d’erreurs ?

Le compilateursignale certaines erreurs de programmations (mais pastoutes ! ! !)ne signale aucune erreur de conception :

la machine fait ce que vous lui dites de faireelle ne sait pas que vous vous trompez de méthodela machine ne fait qu’exécuter vos ordres : c’est vous le chef

Page 38: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Exemple

Prenons le programme suivant : erreur.c

1 i n t main ( )

2 {

3 p r i n t f ( " Bonjour l e monde\n" )

4 re tu rn 0 ;

5 }

Page 39: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Exemple

On le compile : gcc -Wall -o Erreur erreur.c

1 e r r e u r . c : I n f u n c t i o n ? main ? :

2 e r r e u r . c : 3 : e r r o r : s yn t ax e r r o r b e f o r e ? re tu rn ?

3 e r r e u r . c : 4 : warn ing : c o n t r o l r e a c h e s end o f non≠vo id

4 f u n c t i o n

A la lecture des erreurs, on comprend qu’il y a une erreur avant lereturn.E�ectivement, il manque un ’ ;’.

Page 40: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Les erreurs à l’exécution

ce peut être des erreurs de programmation et/ou deconceptionnon détectées à la compilationplus sournoisement :

le programme peut marcher correctement pendant trèslongtemps et produire soudainement une erreurExplication possible : un cas très rare a eu lieuExemple : une division par 0

Page 41: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

Les erreurs

Exemple

Prenons le programme suivant : erreur2.c

1 i n t main ( )

2 {

3 i n t a=13;

4 i n t b=0;

5 i n t c ;

6 c=a/b ;

7 p r i n t f ( "%d\n" , c ) ;

8 re tu rn 0 ;

9 }

La compilation ne détecte aucune erreur, mais si on exécute leprogramme, on obtient le message suivant :

Floating point exception

Page 42: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

IDE : code::blocks

Plan

2 Présentation du langage CPourquoi un langage haut niveau ?Programmation impérative ?Le langage CC et compilationLes erreursIDE : code::blocks

Page 43: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

IDE : code::blocks

Qu’est-ce qu’un IDE

Nous avons vu qu’il nous fallait pour programmer :un éditeur de texteun compilateurun outil pour gérer et traiter les erreurs

Un IDE (Integrated Development Environment, en françaisEnvironnement de développement intégré) contient tous ceséléments.

Page 44: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

IDE : code::blocks

Code::Blocks

C’est un IDE disponible sur plusieurs systèmes (Windows, Linux,Mac OS), gratuit et complet.Il est disponible là : http ://www.codeblocks.org

Regardons attentivement la capture d’écran :

Page 45: Introduction au C/C++

Introduction au C/C++

Présentation du langage C

IDE : code::blocks