Trucs et Astuces pour Visual C++ 6

Bruno Mailly

J'ai regroupé ici toutes ces petites choses si pratiques à savoir, mais pas forcément évidentes à trouver.
Excusez l'écriture parfois simpliste, j'ai essayé d'être concis pour garder le document court.
Contactez-moi pour toute erreur, remarque ou tout ajout. ♪

- Titre : Trucs et Astuces pour Visual C++ 6

- Auteur : Bruno Mailly

- Parution : 26 octobre 2002

- Licence : Copyright ® 2002 Bruno Mailly. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Quelques raccourcis

- I-A. souris

- I-B. déplacement

- I-C. navigation

- I-D. édition

- I-E. renseignements

- I-F. compilation

- I-G. autres

- II. Complétion automatique

- II-A. Aide intégrée

- II-B. Divers

- II-C. Quelques macros bien pratiques

- II-D. Pour composer sa barre d'outils

- II-E. Préprocesseur

- II-F. Compilateur

- II-G. Éditeur de liens

- II-H. Débogage

- II-H-1. Instructions de débogage (ces instructions ne font rien en mode Release)

- II-H-2. Points d'arrêt

- II-H-3. Mode débogage

- II-I. Quelques constantes symboliques prédéfinies

- II-I-1. ANSI

- II-I-2. ANSI (chaînes entre "")

- II-I-3. Spécifique Microsoft

I - Quelques raccourcis

I-A - souris

On peut glisser/déposer le texte sélectionné.

- Ctrl (maintenu) = copier au lieu de déplacer.

- Alt (maintenu) = sélectionner un rectangle de texte (reste un rectangle quand coupé/collé).

- Clic dans la marge = sélectionner des lignes.

- Double-clic = sélection d'un mot.

I-B - déplacement

- Home/End = aller en début/fin de texte de ligne (répéter Home pour aller en début de ligne, +Ctrl=début/fin de fichier).

- Ctrl+Gauche/Droite = aller de mot en mot.

- Ctrl+E = aller à l'accolade/parenthèse/crochet apparié.

- Ctrl+J/K = aller au #if #ifdef #ifndef #else #endif précédent/suivant.

- Ctrl+Shift+F8 = sélectionner un rectangle de texte au curseur.

- +Shift = sélectionner en déplaçant le curseur avec n'importe laquelle des commandes précédentes.

I-C - navigation

- Ctrl+F3 = occurrence suivante du mot courant (+Shift=précédent).

- Ctrl+F2 = mettre/enlever un marque-page (+Shift=tout enlever).

- F2 = aller au marque-page suivant (+Shift=précédent).

- F4 ou double-clic = lignes mentionnées dans la fenêtre output (erreurs ou « Find in Files ») (+Shift=précédent).

I-D - édition

- Ctrl+L = couper ligne(s).

- Ctrl+Shift+T = permuter deux mots.

- Alt+Shift+T = permuter deux lignes.

- Ins = permuter les modes insertion/refrappe de texte.

- Alt+F8 = indenter correctement la sélection.

- Tab = augmenter l'indentation des lignes sélectionnées (+Shift=diminuer).

- Ctrl+U = mettre en minuscules (+Shift=majuscules).

- Ctrl+Backspace =effacer le mot devant.

- Ctrl+Del = effacer le mot derrière.

I-E - renseignements

- F1 = aide sur le mot ou le n° d'erreur de compilation sous le curseur.

- F12 = trouver la définition du nom.

- Ctrl+* (pavé num) = revenir à la position d'origine.

- Alt+F12 = renseignements généraux sur le mot.

- Ctrl+Shift+Espace = afficher le prototype de la fonction (définie) en cours (Ctrl+PgUp/PgDown si plusieurs).

- Ctrl+T = information sur le type (normalement automatique).

- Ctrl+Espace = complétion automatique.

- Alt+Ctrl+T = lister membres (normalement automatique), ou tout si au niveau global.

I-F - compilation

- Alt+F10 = appliquer changement de code sans sortir du débogueur.

- Ctrl+F7 = compiler le source actuel seulement (fichier *.OBJ). C'est plus rapide.

I-G - autres

- Esc = masquer la fenêtre output (elle revient toute seule si elle change).

- Ctrl+I = commencer une recherche incrémentielle (taper les premières lettres).

II - Complétion automatique

C'est la liste qui surgit quand on tape . , :: , ->ou Ctrl+Espace.
Elle complète ce que l'on a commencé à taper, ou propose la liste des éléments pouvant correspondre.
Taper la suite, ou sélectionner un élément avec haut/bas, puis taper un séparateur quelconque (espace, parenthèse …) ou tabulation, et le nom est retapé en entier (avec correction majuscule/minuscule).
Pour en bénéficier avec les constructeurs, utiliser la syntaxe Classe::Classe(.
À noter qu'elle ne marche pas avec les patrons.

Le message d'aide visible dans cette liste, c'est les lignes de commentaires placées immédiatement à côté (//) ou au-dessus (plusieurs lignes, // ou /*…*/) de la déclaration ou de la définition.
Cela ne marche qu'avec les éléments globaux (variables, structures/classes, patrons, fonctions).
Exemple :

/*Contient les coordonnées d'un point
Les mesures sont des entiers*/
struct Point
{    int x ;//abscisse
int y ;//ordonnée
};

II-A - Aide intégrée

Si vous l'avez appelé par F1, cliquez sur le bouton sommaire (ou localiser) de la barre d'outils (pas l'onglet) pour voir dans quelle rubrique vous êtes.
Si la partie « Compatibility » ne mentionne pas « ANSI », ce n'est pas une fonction standard. C'est le cas de tout ce qui commence par « _ ».
La documentation MSDN est normalement livrée avec Visual C++. Elle est aussi disponible en ligne: http://msdn.microsoft.com/.
En voici des rubriques « index » intéressantes :

- Operator Precedence and Associativity : priorité des opérateurs C++ ;

- Precedence and Order of Evaluation : priorité des opérateurs C ;

- C++ operators ;

- C++ Keywords ;

- Reference Tables : Portée des types, codes ASCII et scan codes ;

- Organization of the C++ Language Reference ;

- C Language Reference ;

- C++ Library Overview ;

- DLLs for Beginners : (rechercher) ;

- Standard Types : les types standard non intégrés.

II-B - Divers

Pensez à utiliser les mises à jour (Service Packs), elles corrigent bien des problèmes : [Plus supporté] . La coloration syntaxique de base peut être enrichie : Menu « Tool/Option », onglet « Format », cadre « Colors », sélectionner « Number », « String » puis « Operator » et leur choisir une couleur « Foreground ». Je propose respectivement bordeaux, gris foncé et rouge vif.
« Category : Source Windows » permet de choisir la police du code. Celles en gras sont recommandées (espacement fixe).
« Lucida Console » dispose de petites tailles.

Les menus contextuels sont présents un peu partout, même dans le code. Ils s'appellent avec le clic doit.

- Sur une directive #include, propose d'ouvrir le fichier.

- Sur un nom, propose d'aller à sa déclaration/définition.

II-C - Quelques macros bien pratiques

Menu « Tools/Macro », choisir « Macro File : SAMPLE ».

- « ToggleCommentStyle » change une suite de commentaires // en /*…*/ et inversement.

- « AutoCompleteFromFile » complète un nom s'il se trouve déjà dans le fichier édité.

- Pour créer votre macro, taper un nom, choisir « Edit » et insérer des commandes texte

Exemple :

'DESCRIPTION: écrit un en-tête pour les sources sous Visual C++.
ActiveDocument.Selection.StartOfDocument
ActiveDocument.Selection = "//Fait par: Votre nom"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "//le      :"
ActiveDocument.Selection =Date
ActiveDocument.Selection = ", "
ActiveDocument.Selection =Time
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "//à       : Votre lieu de travail"
ActiveDocument.Selection.NewLine

II-D - Pour composer sa barre d'outils

On peut déplacer un outil en maintenant Alt enfoncée (Ctrl pour copier).
Déplacer hors de toute barre pour supprimer.
La barre de menu est une barre d'outils, on peut l'éditer.
Ouvrir menu « Tools/Customize » ou menu contextuel sur une barre puis « Customize » permet :

- de déplacer un outil ou article de menu existant directement (Ctrl pour copier) ;

- d'utiliser une macro en bouton/menu ;

- activer le fichier macro dans l'onglet « Add-ins and Macro Files » ;

- dans l'onglet « Commands », choisir « Category: Macro », faire glisser une commande dans la barre d'outils.

II-E - Préprocesseur

Pour précompiler seulement, aller dans le menu « Project/Settings » puis onglet « C/C++ », zone « Project Options » et rajouter au texte « /P » ou « /E » ou « /PE ». Cela permet de vérifier si l'expansion des macros est correcte.
P : génère un fichier *.i dans le répertoire du projet (c'est du texte).
E : affiche dans la fenêtre output (attention aux gros includes, genre windows.h).

II-F - Compilateur

Dans les options menu « Project/Settings », onglet « C/C++ », catégorie « Customize », les cases à cocher :

- « Disable language extensions » permet de désactiver les spécificités Microsoft pour être sûr de faire du code conforme au standard ANSI ;

- « Enable incremental compilation » permet de recompiler plus vite, mais génère de plus gros fichiers.

Le menu « Build/Rebuild All » permet de reconstruire tous les fichiers temporaires. Indispensable en cas de problèmes de temps système, de date de modification de fichiers, ou d'incohérence de compilation.
Ne pas oublier pas que les modes « Debug » et « Release » ont des options indépendantes.

II-G - Éditeur de liens

Pour changer le type d'un projet, aller dans le menu « Project/Settings », onglet « Link », zone « Project Options » et changer « /subsytem: » entre « console » et « windows ».

II-H - Débogage

Les options menu « Project/Settings », onglet « Debug », zones « Program arguments: » et « Working Directory: » permettent de spécifier le répertoire de travail et les arguments de l'exécutable.

II-H-1 - Instructions de débogage (ces instructions ne font rien en mode Release)

avec MFC (#include <afxwin.h>):

TRACE();     //comme printf, mais s'affiche dans la fenêtre output en debug (go, F5)
ASSERT();    //suspend l'exécution si l'expression est fausse (0)
VERIFY();    //comme ASSERT, mais l'expression sera calculée en mode release également.
DEBUG_ONLY();//auto informant, non ?

Autres :

assert ();   //ANSI (#include <assert.h>)
_ASSERT();   //#include <crtdbg.h>

II-H-2 - Points d'arrêt

F9 pose/enlève un point d'arrêt. Lancée avec « Go », l'exécution s'y arrêtera. Ils peuvent être placés dans le code source, le code assembleur et la pile d'appels.
Ctrl+Shift+9 enlève tous les points d'arrêt.
Le menu « Edit/Breakpoints » permet de :

- créer/éditer/déplacer/modifier les points d'arrêts ;

- poser une condition à un arrêt existant ;

- poser un arrêt conditionnel sur tout le source (pour une variable locale, préciser la fonction) ;

- poser un arrêt sur un message Windows.

II-H-3 - Mode débogage

On peut avancer jusqu'à n'importe quel point en y plaçant le curseur et en choisissant menu « Debug/Run to Cursor » (Ctrl+F10).
Placer le pointeur de souris sur une variable indique immédiatement sa valeur.
La fenêtre « Variables » (menu « View/Debug Windows ») permet de voir et changer les valeurs des variables en cours.
La fenêtre « Call Stack » (menu « View/Debug Windows ») permet, après un échec d'assertion, de remonter à la fonction appelante.
La fenêtre « Watch » (menu « View/Debug Windows ») permet :

- d'y glisser une expression depuis le code ;

- de connaître le type d'une variable. L'y sélectionner et appeler le menu contextuel et « Properties » (Alt+Entrée) ;

- de changer la valeur d'une variable facilement. Mettre comme nom var=valeur. La valeur sera affectée à var à chaque activation de l'onglet ;

- de choisir le format d'affichage des valeurs. Il faut ajouter au nom « , » et :
(Il y en a d'autres à la rubrique « Symbols for Watch Variables » dans la MSDN)

f

float

c

caractère

s

chaîne

us

chaîne unicode

wm

message windows

l,h

préfixe long/short pour les suivants :

d,i

décimal signé

u

décimal non signé

o

octal non signé

x,X

hexa

II-I - Quelques constantes symboliques prédéfinies

II-I-1 - ANSI

__STDC__

C standard

NDEBUG

Not Debug

II-I-2 - ANSI (chaînes entre "")

__FILE__

Nom du fichier compilé

__TIMESTAMP__

Moment de la dernière modification du fichier

__LINE__

N° de ligne courante du fichier

__DATE__

Date courante

__TIME__

Heure courante

II-I-3 - Spécifique Microsoft

_MSC_VER

Version du compilateur Microsoft

__cplusplus

Source C++

_DLL

Contexte Multithread (avec DLL)

_MT

Contexte Multithread

_WIN32

Contexte Windows 32 bits

_CPPRTTI

Informations de type à l'exécution activées

_CPPUNWIND

Gestion des exceptions activé

_UNICODE

Définir pour unicode (wide-character)

_MBCS

Définir pour caractères multibyte

_DEBUG

Mode debug