34
1 Prise en main de Visual C++ 6.0 1) premier programme Sélectionnez l’icône suivante pour démarrer l’application. La fenêtre suivante s’ouvre à l’écran. Pour créer un nouveau projet, cliquez sur le menu File, New :

Prise en main de Visual C++ 6 - easytp.cnam.freasytp.cnam.fr/alexandre/index_fichiers/support/VisualC++_6.0.pdf · 3 La fenêtre suivante s’ouvre pour vous informer de la création

  • Upload
    buitu

  • View
    216

  • Download
    1

Embed Size (px)

Citation preview

1

Prise en main de Visual C++ 6.0

1) premier programme

Sélectionnez l’icône suivante pour démarrer l’application.

La fenêtre suivante s’ouvre à l’écran.

Pour créer un nouveau projet, cliquez sur le menu File, New :

2

Dans la fenêtre New qui s’ouvre alors sur l’onglet Projects, sélectionnez « Win32 Console

Application », indiquez le répertoire où vous voulez créer votre projet (ici D:\users\dut_info)

puis tapez le nom de votre projet (ici, il s’agit de essai). Un répertoire essai sera créé

automatiquement dans D:\users\dut_info. Cliquez sur OK pour démarrer la création du projet

essai.

La fenêtre suivante s’ouvre. Sélectionnez « an empty project », puis cliquez sur le bouton

Finish.

3

La fenêtre suivante s’ouvre pour vous informer de la création d’un projet vide. Cliquez sur le

bouton OK.

La fenêtre principale de Visual C++ est maintenant la suivante.

4

Sélectionnez l’onglet File View (en bas à gauche) puis cliquez sur le signe + à gauche de

« essai files » pour obtenir :

Nous allons maintenant pouvoir créer un fichier essai.c qui contiendra le programme. Pour

cela, cliquez sur le menu File, New. Dans la fenêtre New qui s’ouvre alors sur l’onglet Files,

sélectionnez « C++ Source File » puis tapez le nom du fichier (essai.c). Il sera

automatiquement ajouté au projet essai. Cliquez sur OK pour créer ce fichier.

Dans la fenêtre de gauche, cliquez sur le signe + à gauche du répertoire « Source Files » pour

voir le fichier créé :

5

La grande fenêtre de droite est un éditeur ouvert sur le fichier essai.c (dont le nom apparaît

entre crochets dans le bandeau bleu). Cliquez dans la fenêtre d’édition, puis saisissez votre

premier programme.

Sauvez votre programme en cliquant sur la disquette qui se trouve dans la barre d’outils. Nous

pouvons maintenant lancer la compilation en cliquant sur le menu Build, Build essai.exe ou

bien en tapant sur la touche F7 du clavier (il s’agit d’un raccourci). Vous pouvez voir dans la

fenêtre inférieure (en bas de la fenêtre principale) :

6

Cette fenêtre contient les messages d’erreur (error) ou les avertissements (warning) renvoyés

par le compilateur. Ici, il n’y a qu’un avertissement que vous pouvez ignorer. Le compilateur

a créé un exécutable essai.exe que nous pouvons lancer en cliquant sur le menu Build,

Execute essai.exe ou bien en appuyant sur les touches Ctrl+F5 du clavier. Une fenêtre console

s’ouvre afin de lancer essai.exe. La console s’ouvre automatiquement puisqu’il s’agit d’une

application Windows non-graphique qui doit donc obligatoirement s’exécuter à l’aide d’un

interpréteur de commande. Le programme a bien affiché « coucou » sur la première ligne,

puis il s’est arrêté. Tapez n’importe quelle touche du clavier pour fermer la console.

2) trouver une erreur de compilation avec Visual C++

Revenez dans l’éditeur et saisissez le programme suivant à la place du programme

précédent :

7

Pendant la saisie, faites attention à ce que l’éditeur soit en mode Insertion et pas en mode

Overstrike. On passe de l’un à l’autre en appuyant sur la touche Insert du clavier. En mode

Overstrike, les trois lettres OVR apparaissent en noir en bas et à droite de la fenêtre

principale. Si vous cliquez au milieu d’un mot puis que vous tapez du texte, celui-ci écrase le

texte existant. En mode Insertion, les trois lettres OVR apparaissent en gris et votre texte

s’insère dans le texte existant. Vous noterez aussi que l’éditeur de Visual C++ vous indique le

numéro de ligne ainsi que le numéro de colonne où se trouve le curseur.

La compilation ne doit plus maintenant donner ni erreur, ni warning.

Visual C++ apporte de nombreuses commodités pour éviter les erreurs de syntaxe. Par

exemple, lorsque vous tapez une fonction dans l’éditeur, Visual C++ vous montre

automatiquement la syntaxe de cette fonction (en fait, il s’agit de son prototype).

8

D’autre part, vous pouvez sélectionner un mot-clé du langage (qui apparaît en bleu dans le

programme) ou bien une fonction dans l’éditeur et appuyer sur la touche F1 du clavier. L’aide

en ligne démarre alors automatiquement. Par exemple, sélectionnez le mot-clé while et

appuyez sur F1. Le navigateur Internet démarre et la fenêtre « Rubriques trouvées apparaît :

Sélectionnez la rubrique « The C while statement » à l’emplacement « C/C++ languages »

puis cliquez sur le bouton Afficher. L’aide en ligne affiche maintenant la page sur le while.

Cette page, en anglais, contient généralement un exemple d’utilisation.

9

La documentation en ligne est le premier endroit où vous devez chercher l’information qui

vous manque. Introduisons maintenant une erreur dans notre programme en supprimant le ; à

la fin de la ligne 10 (i = 1;). Le compilateur indique maintenant l’erreur suivante ( ;

manquant avant somme) :

Si vous double-cliquez sur le message d’erreur, un curseur bleu va automatiquement se placer

sur la ligne correspondante dans l’éditeur.

Vous noterez que l’erreur a été vue sur la ligne qui suit le ; manquant. Pour obtenir plus d’aide

sur cette erreur, vous pouvez sélectionner le code de l’erreur, puis appuyer sur F1.

L’aide en ligne vous explique alors à quoi correspond cette erreur. Cette méthode marche de

la même manière avec les avertissements.

10

Les erreurs de compilation ne sont hélas pas toujours aussi facile à trouver. Si par exemple

vous oubliez l’accolade après le while ligne 12, les messages sont les suivants :

Le compilateur est alors complètement perdu parce qu’une paire d’accolades est déséquilibrée

et qu’il n’y a plus autant d’accolade ouvrante ({) que d’accolade fermante (}). Il ne voit

l’erreur que sur la dernière ligne (celle du printf), ce qui ne nous indique pas grand chose.

Double-cliquer sur un des messages ne vous donne pas non plus beaucoup d’information.

Dans ce cas, il n’y a pas vraiment de méthode logique pour trouver l’erreur de compilation.

Les erreurs d’équilibrage (accolades {} ou bien parenthèses()) sont les plus difficiles à

découvrir. Mais en utilisant l’indentation dans vos programmes, il devient facile de les éviter.

L’éditeur vous propose une aide pour vérifier à quelle accolade ouvrante correspond une

accolade fermante (cela marche aussi avec les parenthèses). Il suffit pour cela de placer le

curseur près de l’accolade puis d’appuyer sur les touches Ctrl+E du clavier. Le curseur se

déplace alors automatiquement vers l’accolade inverse correspondante.

11

En règle générale, il faut toujours commencer par corriger la première erreur dans la liste

(quand il y a plusieurs messages d’erreur).

Notes importantes

I) La présence d’une erreur de compilation empêche la création du programme

exécutable ce qui empêche donc la mise au point (le debug).

II) Les warnings étant rarement un bon signe, il est préférable de les éliminer. Un

programme correctement écrit ne contient généralement pas de warning.

3) debugger un programme avec Visual C++

Ce n’est pas parce que le programme est écrit et compilé sans erreurs ni warnings qu’il

fonctionne comme prévu. Quand le programme ne s’exécute pas comme vous l’auriez

souhaité, il faut passer à la phase de mise au point (le debug). Pour cela, Visual C++ offre un

debugger intégré très pratique à l’usage. Voyons son fonctionnement avec le programme

précédent. Placez le curseur sur la ligne 7 de l’éditeur (avant le printf) puis cliquez avec le

bouton droit de la souris. Le menu contextuel suivant apparaît :

Cliquez sur « Insert/Remove Breakpoint » pour insérer un point d’arrêt dans votre programme

(ou bien appuyez sur la touche F9 du clavier). Il apparaît en rouge dans la colonne de gauche

de l’éditeur.

12

Lorsque vous lancez le programme avec F5, une fenêtre console s’ouvre. Le programme

commence son exécution puis s’arrête sur le premier point d’arrêt rencontré. Vous êtes alors

dans le debugger. La fenêtre principale de Visual C++ est maintenant séparée en trois zones :

l’éditeur, la zone de visualisation des variables locales (en bas à gauche) et la zone Watch (en

bas à droite).

La flèche jaune dans la colonne de gauche de l’éditeur indique la ligne qui va être

prochainement exécutée. Ici, elle se trouve sur le point d’arrêt, ce qui est normal puisque le

programme s’est arrêté à cet endroit. Nous pouvons maintenant avancer dans le programme

en mode pas à pas. Cliquez sur le menu Debug, Step over ou bien sur l’icône ou encore

appuyez sur la touche F10 du clavier.

13

La flèche jaune a avancé d’une ligne et l’instruction printf a été exécutée comme vous pouvez

le voir dans la console.

Appuyez à nouveau sur F10. La flèche n’avance pas et les icônes d’avancement pas à pas

deviennent grises :

C’est normal car vous êtes en train d’exécuter un scanf. Cette fonction attend une saisie au

clavier. Il faut donc faire apparaître la console et saisir une valeur :

Au moment où vous tapez sur la touche « Entrée », la fenêtre de Visual C++ re-apparaît au

premier plan. La flèche a avancé d’une ligne.

14

Dans la fenêtre inférieure gauche, cliquez sur l’onglet « Locals ». Vous pouvez voir que le

contenu de N vaut maintenant 5 :

Avançons de deux lignes (F10, F10). Le curseur pointe sur le while,

et toutes les variables sont initialisées.

La valeur de la variable qui vient de changer apparaît en rouge.

15

Vous pouvez voir le contenu de ces variables en hexadécimal. Pour cela, placez le curseur de

la souris dans la fenêtre contenant les variables, cliquez avec le bouton droit de la souris puis

sur « Hexadecimal Display ».

Toutes les variables s’affichent maintenant en hexadécimal.

Pour revenir en décimal, refaites la même opération. Vous pouvez à tout moment interrompre

le mode debug en cliquant sur l’icône « Stop Debugging » . Vous retrouvez alors l’aspect

normal de la fenêtre de Visual C++. Vous pouvez à tout moment continuer l’exécution du

programme en cliquant sur l’icône « Go » (ou sur F5). Le programme s’exécute alors

jusqu’au point d’arrêt suivant ou jusqu’à la fin s’il n’y en a plus. La console se ferme alors

automatiquement. Pour supprimer un point d’arrêt, placer le curseur sur la ligne où il se

trouve, cliquez avec le bouton droit de la souris puis cliquez sur « Remove Breakpoint » dans

le menu contextuel qui apparaît. Notez bien qu’un nombre quelconque de point d’arrêt peut

être placé dans un programme.

16

Vous pouvez grâce au debugger voir l’évolution de la valeur de vos variables en exécutant

votre programme pas à pas. Mettez par exemple un point d’arrêt sur le while, puis lancez le

programme avec F5 (n’oubliez pas de taper une valeur dans la console, le programme étant

bloqué sur le premier scanf). Exécutez ensuite le programme en mode pas à pas (avec F10)

pour voir vos variables évoluer à chaque tour dans le while. Vous pouvez à tout moment

connaître la valeur d’une variable de votre programme en plaçant le curseur de la souris sur le

nom de cette variable (ici par exemple, la variable somme) ou encore en sélectionnant le nom

de la variable et en plaçant le curseur sur la sélection :

De la même manière, vous pouvez voir la valeur d’une expression en la sélectionnant puis en

plaçant le curseur de la souris sur cette sélection (ici, l’expression somme + i) :

Si vous êtes en mode hexadécimal, toutes les variables et expression apparaissent en

hexadécimal.

En mode debug, vous pouvez rajouter différentes fenêtres sous la fenêtre d’édition. Pour cela,

placez le pointeur de la souris sur la ligne horizontale qui sépare les zones (le curseur change

d’apparence) puis cliquez avec le bouton droit de la souris :

17

La partie supérieure du menu contextuel vous indique les fenêtres qu’il est possible de faire

apparaître. Il suffit de cliquer sur la ligne pour que la fenêtre apparaisse (si elle n’existe pas)

ou disparaisse (si elle existe). Seules les fenêtres Watch, Variables et Memory nous

intéressent pour l’instant. Nous avons déjà vu la fenêtre Variables qui permet de visualiser le

contenu des variables locales. Vous ne pouvez pas ajouter ou retirer de variables dans cette

fenêtre. Par contre, vous pouvez modifier la valeur d’une variable en double cliquant dans le

champ Value de la variable, puis en tapant une nouvelle valeur. La prise en compte est

immédiate.

La fenêtre Watch (évaluation) est beaucoup plus puissante car elle permet d’évaluer n’importe

quelle expression qu’elle existe ou non dans votre programme. Vous pouvez :

• Soit sélectionner une variable ou une expression dans votre programme puis la tirer dans la

fenêtre Watch. Vous pouvez alors modifier sa valeur comme dans la fenêtre Variable.

• Soit taper directement une expression. Pour cela, double-cliquez dans un champ Name vide

18

puis tapez l’expression à évaluer.

En mode pas à pas, cette expression évolue avec les variables qui la compose. Pour

supprimer une expression en cours d’évaluation, il suffit de sélectionner la ligne puis de

taper sur la touche Suppr du clavier.

La fenêtre Memory permet de visualiser n’importe quelle emplacement dans la mémoire

virtuelle associée au programme, c’est-à-dire de l’adresse 0 (0x00000000) à l’adresse 232-1

(0xFFFFFFFF) sous Windows. Lorsque la fenêtre apparaît, on obtient :

Vous pouvez déplacer la fenêtre Memory en cliquant dans son bandeau bleu puis en plaçant le

rectangle obtenu entre les deux fenêtres Watch et Variables comme sur la figure suivante :

19

Il suffit maintenant de taper une adresse dans le champ Address de la fenêtre Memory pour

voir le contenu de la mémoire virtuelle à partir de cette adresse (ici, 0x0012FF78).

La fenêtre Memory comprend trois champ d’affichage : les adresses, les données sous forme

hexadécimale et les données sous forme de code ASCII. L’adresse à gauche de la ligne

correspond à l’adresse du premier octet de donnée de la ligne. Les octets suivants se trouvent

une case mémoire plus loin. Pour cet exemple, si on prend la première ligne, on trouve :

20

adresse donnée

0x0012FF78 04

0x0012FF79 03

0x0012FF7A 02

0x0012FF7B 01

0x0012FF7C 04

Le premier octet de la ligne suivante (00) se trouve donc bien à l’adresse 0x0012FF7D (c’est

à dire 0x0012FF78 + 5).

Cette possibilité de voir le contenu de la mémoire est très commode quand on utilise les

pointeurs. A titre d’exemple, vous pouvez faire les opérations suivantes :

1. Visualiser l’expression &i dans la fenêtre Watch (&variable indique l’adresse de la

variable). Ici l’adresse de i vaut 0x0012FF7C.

2. Tapez cette adresse dans la fenêtre Memory.

3. Vérifier la valeur de i en comparant avec la valeur indiquée dans la fenêtre Variables.

La variable i est un entier 32 bits codé sur 4 octets dont la valeur vaut 4, soit 0x00000004 en

hexadécimal. On voit bien que l’octet de poids faible se trouve à l’adresse 0x0012FF7C et que

les trois octets suivants se trouvent au-dessus dans la mémoire.

Vous pouvez changer le nombre d’octets par ligne en changeant la largeur de la fenêtre. On

essaye généralement d’obtenir un multiple de 4 car c’est plus commode pour lire les entiers.

21

4) les fonctions

Il est courant d’utiliser des fonctions dans un programme en C comme dans l’exemple

suivant :

Lancé avec F5, le programme s’arrête sur la ligne 7, juste avant l’appel de la fonction

puissance().

En cliquant sur le bouton « Step Over » (ou bien en appuyant sur la touche F10), vous

passez à la ligne suivante sans rentrer dans la fonction (mais celle-ci est quand même

exécutée) :

22

alors qu’en cliquant sur le bouton « Step Into » (F11), vous pouvez entrer en mode pas à

pas dans la fonction :

Une fois que vous êtes dans une fonction, vous pouvez toujours utiliser le mode pas à pas

(« Step Out » ou « Step Over » à votre convenance). Si vous souhaitez arrêter le mode pas à

pas et sortir de la fonction, il suffit de cliquer sur la touche « Step Out » .

23

Si vous utilisez le « Step Into » avec la fonction printf(), vous allez voir la définition de cette

fonction, ce qui n’a rien de particulièrement intéressant.

Il est donc préférable d’utiliser « Step Over » pour ne pas rentrer dans les fonctions standards

du C et « Step Into » pour rentrer dans vos fonctions. Il est à noter qu’un point d’arrêt peut

être placé n’importe où dans un programme, y compris à l’intérieur d’une fonction. Vous avez

aussi la possibilité avec la touche « Run to Cursor » d’exécuter votre programme jusqu’à

une certaine ligne. Pour cela, cliquez sur une ligne dans votre fichier source pour y placer le

curseur puis cliquez sur « Run to Cursor ».

Les variables locales ne peuvent être observées que lorsque vous êtes dans la fonction où elles

sont définies. Par exemple, vous pouvez voir le contenu de l’entier n dans la zone Watch tant

que vous êtes dans la fonction main().

24

Par contre, dès que vous rentrez dans la fonction puissance(), n cesse d’être visible (voir : le

message d’erreur dans la zone Watch).

Il se produit le même phénomène pour les variables locales de la fonction puissance() comme

i et puis.

5) les pointeurs et les tableaux

Sous Visual C++, les pointeurs sont manipulés comme les autres types de variables. Prenons

l’exemple du programme suivant :

25

Après lancement avec F5, nous allons placer dans la zone Watch les variables &n, ptri1, &p

et ptri2 (en les sélectionnant dans le source puis en les tirant dans la zone) :

Les pointeurs sur entier ptri1 et ptri2 sont maintenant visibles. En cliquant sur le signe +

à gauche des pointeurs, nous découvrons la valeur pointée :

Comme nous avons mis un point d’arrêt au début du programme, les pointeurs ne sont pas

encore initialisés, ce qui explique les messages d’erreurs. Après deux « Step Over »,

26

prti1 contient l’adresse de n et pointe sur la valeur contenue par n et prti2 contient

l’adresse de p et pointe sur la valeur contenue par p.

Dans le cas où vous utiliseriez un tableau comme dans l’exemple suivant :

Vous pouvez voir le contenu du tableau tab en procédant de la manière suivante. Lancez le

programme avec F5 puis tirez le nom du tableau dans la fenêtre Watch et cliquez sur le

signe + :

27

Le contenu des 6 cases du tableau apparaît. Il est encore non initialisé puisque le point d’arrêt

se trouve au début du programme. A chaque fois que vous cliquerez sur « Step Over », vous

verrez le tableau se remplir, la dernière valeur modifiée apparaissant en rouge.

28

Vous pouvez aussi visualiser le contenu d’une case particulière du tableau en saisissant cette

case dans la zone Watch :

Vous pouvez aussi voir le contenu du tableau directement dans la mémoire en faisant

apparaître la zone Memory et en tapant l’adresse du tableau dans le champ Address :

A chaque activation de « Step Over », vous verrez le tableau se remplir dans la zone Watch et

les 4 octets correspondant à la valeur entière apparaîtront dans la mémoire.

29

6) passage de paramètres sur la ligne de commande

Sous Visual C++, la console est ouverte automatiquement au moment du lancement du

programme (avec Ctrl+F5 par exemple). Il est donc impossible de passer des paramètres à la

fonction main() au moment du lancement. Pour passer des paramètres sur la ligne de

commande, il faut procéder de la manière suivante. Prenons le programme suivant comme

exemple :

Pour spécifier les paramètres à passer, cliquez sur :

Sélectionnez l’onglet Debug dans la fenêtre qui apparaît :

30

Tapez les paramètres in.txt et out.txt dans la case « Program arguments » :

puis cliquez sur OK. Placez un point d’arrêt sur la ligne contenant le if puis lancez le

programme essai en appuyant sur F5 :

31

En plaçant argc et argv dans la zone Watch, vous pouvez constater que les paramètres ont

bien été passés.

Vous pouvez maintenant avancer en mode pas à pas et vérifier que in.txt a bien été copié dans

le tableau InFileName et que le pointeur OutFileName contient l’adresse de argv[2].

Le programme essai affiche comme prévu dans la console :

32

7) emplacement des fichiers

Voyons maintenant l’emplacement des fichiers dans un projet Visual C++. Lors de la création

du projet suivant (essai) :

Les répertoires suivants sont créés sur le disque dur :

Dans cet exemple, le projet essai a été créé dans le répertoire c:\temp. Le répertoire essai

contient (entre autres) le fichier source essai.c et le répertoire Debug contient l’exécutable

essai.exe (que vous pouvez d’ailleurs lancer à la main en ouvrant une console en dehors de

Visual C++). Par défaut, les créations et les ouvertures des fichiers utilisateur se font dans le

répertoire du projet (ici, c:\temp\essai). Par exemple, si vous lancer le programme :

33

Le fichier sortie.txt va être créé dans le répertoire essai.

Si vous souhaitez modifier le répertoire où les fichiers sont ouverts, il suffit de cliquez sur

Project, Settings puis de sélectionner l’onglet Debug.

Tapez le nom du nouveau répertoire dans la case Working directory puis cliquez sur OK.

Dans notre exemple, le fichier sortie.txt est maintenant créé dans le répertoire c:\temp :

34