Trucs et Astuces pour Visual C++ 6

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 ajout.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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(.
A 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 à coté (//) 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:

 
Sélectionnez
/*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/Accès au MSDN.
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:

 
Sélectionnez

'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 au 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éboguage

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éboguage (ces instructions ne font rien en mode Release)

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

 
Sélectionnez
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 :

 
Sélectionnez
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'appel.
Ctrl+Shift+9 Enlèves 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éboguage

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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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.