Trucs et astuces pour Visual C++ 6 [C++] - C++ - Programmation
Marsh Posté le 03-07-2002 à 04:29:42
-Nouvelle version. 
-Fichier téléchargeable. 
 
Ça ne déchaîne pas les passions... peut-être que peu d'entre-vous utlisent VC++ 6 ? 
Pour ma part, je commence à comprendre les problèmes qu'ils pose. 
Marsh Posté le 03-07-2002 à 08:57:05
tu devrais poster l'adresse de ton topic dans le bibliolink c++, histoire que tout le monde puisse le retrouver facilement, si besoin.
Marsh Posté le 03-07-2002 à 13:46:36
si quelqu'un connait autant de trucs et astuces pour delphi ça m'intéresse!!   
  
Marsh Posté le 03-07-2002 à 23:50:05
prettysmile: Je conaissait pas, merci. 
 
L'éternelle quête de la bonne info parmi le brouaha généralisé continue!
Marsh Posté le 04-07-2002 à 00:51:26
musaran  tres bonne initiativ mais bon l'environnement VC++ ne fait pas le poid face a un emacs   
  
(surtout le mien avec la puissance jacky inside  
  )
)  
 
que je le regrete celui la quand je suis sous visual   
  
mais bon tes petit astuce me font retrouver 2/3 bonne choses de emacs et me serront bien utiles   
 
Marsh Posté le 04-07-2002 à 12:22:04
Je ne sais pas si tu la mis, mais la combinaison ctrl+shift+F9 permet d'enlever tous les breakpoints en un coup, assez pratique.
Marsh Posté le 04-07-2002 à 23:03:59
Voila mon fichier de macros VC. Mais bientot je pourrais le mettre a la poubelle car je suis en train d'ecrire un systeme d'extension en python a VC :-) 
 
 
 
Sub SomeLineUp() 
'DESCRIPTION: Move some lines up 
 on error resume next 
 ActiveDocument.Selection.LineUp dsMove,5 
End Sub 
 
Sub SomeLineDown() 
'DESCRIPTION: Move some lines down 
 on error resume next 
 ActiveDocument.Selection.LineDown dsMove, 5 
End Sub 
 
Sub CleanBuild() 
'DESCRIPTION: Enleve tous les fichiers intermediaires puis build le projet 
 
Clean ActiveConfiguration 
Build 
 
End Sub 
 
Sub VireInutile() 
'DESCRIPTION: Enleve les espaces en fin de ligne 
 
'Par le pouvoir de la Reg-Exp !!! Je reclame le Replace tout puissant !!! 
curr_ligne = ActiveDocument.Selection.CurrentLine 
curr_col = ActiveDocument.Selection.CurrentColumn 
ActiveDocument.Selection.SelectAll 
ActiveDocument.Selection.ReplaceText "\:b*$", "", dsMatchRegExp 
ActiveDocument.Selection.MoveTo curr_ligne, curr_col 
End Sub 
 
Sub OemToANSI() 
'DESCRIPTION: Convertit un texte OEM en ANSI 
 
curr_ligne = ActiveDocument.Selection.CurrentLine 
curr_col = ActiveDocument.Selection.CurrentColumn 
ActiveDocument.Selection.SelectAll 
ActiveDocument.Selection.ReplaceText chr(130), "é" 
ActiveDocument.Selection.ReplaceText chr(138), "è" 
ActiveDocument.Selection.ReplaceText chr(147), "ô" 
ActiveDocument.Selection.ReplaceText chr(136), "ê" 
ActiveDocument.Selection.ReplaceText chr(133), "à" 
ActiveDocument.Selection.ReplaceText chr(131), "â" 
ActiveDocument.Selection.ReplaceText chr(248), "°" 
ActiveDocument.Selection.ReplaceText chr(196), "-" 
ActiveDocument.Selection.MoveTo curr_ligne, curr_col 
End Sub 
 
 
Dim clipboard(64) 
Dim cliplines 
cliplines=-1 
clipboard(0) = "" 
 
Sub StackClipboardCut() 
'DESCRIPTION: Performs a cut of current selection into LIFO stack 
     if(cliplines<63) then 
      cliplines=cliplines+1 
      clipboard(cliplines)=ActiveDocument.Selection.Text 
      ActiveDocument.Selection.Text="" 
     end if 
End Sub 
 
Sub StackClipboardCopy() 
'DESCRIPTION: Performs a copy of current selection into LIFO stack 
     if(cliplines<63) then 
      cliplines=cliplines+1 
      clipboard(cliplines)=ActiveDocument.Selection.Text 
     end if 
End Sub 
 
Sub StackClipboardPaste() 
'DESCRIPTION: Performs a paste of top LIFO stack entry into current selection 
     if(cliplines>-1) then 
      ActiveDocument.Selection=clipboard(cliplines) 
   cliplines=cliplines-1 
 	else 
   ActiveDocument.Selection=clipboard(0) 
     end if 
End Sub 
 
Sub InverseAffect() 
'DESCRIPTION: Inverse les membres gauche et droite d'affectation ( selectionner les affectations ) 
 
 ActiveDocument.Selection.ReplaceText _ 
 "\([^  ]*\)\:b*=\:b*\([^  ;]*\)", "\2 = \1", dsMatchRegExp 
 '"\(\:i\)\:b*=\:b*\(\:i\)", "\2 = \1", dsMatchRegExp _ 
  
End Sub 
 
Sub InsereLigne() 
'DESCRIPTION: Insere au debut de chaque ligne de la selection un texte 
if ActiveDocument.Selection.TopLine = ActiveDocument.Selection.BottomLine then 
 exit sub 
end if 
 
curr_ligne = ActiveDocument.Selection.CurrentLine 
curr_col = ActiveDocument.Selection.CurrentColumn 
 
texte = inputbox("Quel texte voulez vous ajoutez au debut de chaque ligne de la selection ?", "Ajout d'un texte en debut de lignes" ) 
if Len(texte)=0 then 
 exit sub 
end if 
ActiveDocument.Selection.ReplaceText "^",texte, dsMatchRegExp 
 
ActiveDocument.Selection.MoveTo curr_ligne, curr_col 
End Sub 
 
Sub CommenteBloc() 
'DESCRIPTION: Commente une selection 
curr_ligne = ActiveDocument.Selection.CurrentLine 
curr_col = ActiveDocument.Selection.CurrentColumn 
 
ActiveDocument.Selection.ReplaceText "^\:b*//\:b*","", dsMatchRegExp 
ActiveDocument.Selection.ReplaceText "^","//", dsMatchRegExp 
 
ActiveDocument.Selection.MoveTo curr_ligne, curr_col 
End Sub 
 
Sub LignesNumerotees() 
'DESCRIPTION: Ecris une suite de lignes numerotees 
curr_ligne = ActiveDocument.Selection.CurrentLine 
curr_col = ActiveDocument.Selection.CurrentColumn 
 
tmp = InputBox("Combien de lignes voulez-vous creer ?", "Entree de lignes" ) 
if Len(tmp)=0 then 
 exit sub 
end if 
 
cnt = InputBox("Combien de textes par ligne ? (au moins 1)", "Entree de lignes" ) 
if (cnt<1) then 
 Msgbox cnt + " n'est pas une valeur valide ! Reessayez !" 
 exit sub 
end if 
 
NbLignes = CInt(tmp) 
texte = InputBox("Quel texte voulez-vous entrer ?", "Entree de lignes" ) 
 
ActiveDocument.Selection.MoveTo curr_ligne, curr_col 
Ajout = "" 
for Cpt1 = 0 to NbLignes 
'	ActiveDocument.Selection.Text = texte + CStr(Cpt1) + "," + chr(13) 
 if (Cpt1<10) then 
 	autre = " " 
 else 
 	autre = "" 
 end if 
 if ((Cpt1+1) mod Cnt) <> 0 then 
 	Ajout = Ajout + texte + CStr(Cpt1) + ", " + autre 
 else 
 	Ajout = Ajout + texte + CStr(Cpt1) + "," + autre + chr(13) 
 end if 
next 
 
ActiveDocument.Selection.Text = Ajout 
ActiveDocument.Selection.MoveTo curr_ligne, curr_col 
 
End Sub 
 
 
 
 
Sub Indentator() 
'DESCRIPTION: Indentator, il va tout vous indenter !!! 
 
curr_ligne = ActiveDocument.Selection.CurrentLine 
curr_col = ActiveDocument.Selection.CurrentColumn 
if (ActiveDocument.Selection.BottomLine=ActiveDocument.Selection.TopLine) then 
 ActiveDocument.Selection.SelectAll 
end if 
premier = ActiveDocument.Selection.TopLine 
max_ligne = ActiveDocument.Selection.BottomLine 
 
Application.visible = false 
ActiveDocument.Selection.MoveTo 0,0 
for Cpt1=premier to max_ligne 
 ActiveDocument.Selection.MoveTo Cpt1, 1 
 ActiveDocument.Selection.SmartFormat 
 ActiveDocument.Selection.LineDown 
next 
Application.visible = true 
 
ActiveDocument.Selection.MoveTo curr_ligne, curr_col 
End Sub 
 
 
 
' This will assisgn resource ID's to the selected block by starting  
' with the resource ID given and then incrementing until the end of  
' the selection is reaced. 
' (Uncomment the commented lines to process only sourcecode files) 
 
Sub AssignResourceIDToSelection() 
 
     msg = InputBox ("Enter The resource ID to start From:" ) 
 
'    TypeOfFile = FileType(ActiveDocument) 
 
'    if TypeOfFile <> dsCPP   Then 
'         MsgBox "File Must be of type .c, .cpp, .cxx, .h, .hpp, .hxx" 
'    Else 
          If msg <> "" Then 
               If IsNumeric(msg) Then 
                    nCurResourceID = Int(msg) 
                    AssignGivenResourceIDToSelection(nCurResourceID) 
               End If 
          Else 
               MsgBox "You MUST enter a resource ID, Aborting" 
          End If 
'    End if 
End Sub 
 
 
'This function can be integrated with other macros to 
'automate the renumbering of resource ID's 
 
Function AssignGivenResourceIDToSelection (ByVal nCurResourceID) 
 
     nStartLine = ActiveDocument.Selection.TopLine 
     nEndLine = ActiveDocument.Selection.BottomLine 
 
     ' Debugging messageBox 
     ' MsgBox "Start:" + CStr(nStartLine) + " End:" + + CStr(nEndLine) 
     For i = nStartLine To nEndLine 
          ActiveDocument.Selection.GoToLine i 
          ActiveDocument.Selection.FindText "#define", dsMatchForward 
          If ActiveDocument.Selection.CurrentLine = i Then 
               ' Debugging messageBox 
               ' MsgBox "Ext:" + CStr(ActiveDocument.Selection.CurrentLine) 
               ActiveDocument.Selection.EndOfLine 
               ActiveDocument.Selection.WordLeft dsExtend 
               ActiveDocument.Selection = nCurResourceID 
               nCurResourceID = nCurResourceID + 1 
          End if 
     Next 
 
End Function 
 
Sub DocumentName() 
'DESCRIPTION: Affiche le nom d'un document 
 
 msgbox Application.ActiveDocument.FullName 
End Sub 
 
Sub TrueFalse() 
'DESCRIPTION: A description was not provided. 
 Application.visible = false 
 windows.CloseAll 
 
 Documents.Open ActiveProject.FullName, "Text" 
 ActiveDocument.Selection.MoveTo 1,1 
 line = 0 
 do while(ActiveDocument.Selection.FindText("SOURCE=.*\{\.h\!\.c\!\.cpp\}$", dsMatchRegExp)=true) 
 	if (line>=ActiveDocument.Selection.CurrentLine) then 
   exit do 
 	end if 
 	TrueFalseFile(ActiveDocument.Selection.Text) 
 	line = ActiveDocument.Selection.CurrentLine 
 Loop 
 ActiveDocument.Close 
 Application.visible = true 
 MsgBox "BOOL, TRUE et FALSE, mis a jour !" 
End Sub 
 
sub TrueFalseFile(filename) 
 filename = mid(filename, 8) ' vire SOURCE= 
 Documents.Open filename 
 ActiveDocument.Selection.SelectAll 
 ActiveDocument.Selection.ReplaceText "true", "TRUE", dsMatchWord 
 ActiveDocument.Selection.SelectAll 
 ActiveDocument.Selection.ReplaceText "false", "FALSE", dsMatchWord 
 ActiveDocument.Selection.SelectAll 
 ActiveDocument.Selection.ReplaceText "bool", "BOOL", dsMatchWord 
 ActiveDocument.Close 
 
end sub 
 
Sub MyNextLine() 
'DESCRIPTION: A description was not provided. 
 ActiveDocument.Selection.SmartFormat 
 ActiveDocument.Selection.LineDown 
End Sub 
 
Sub MyPreviousLine() 
'DESCRIPTION: A description was not provided. 
 ActiveDocument.Selection.SmartFormat 
 ActiveDocument.Selection.LineUp 
End Sub 
 
Sub OuvreSourcesDuProjet() 
'DESCRIPTION: Ouvre tous les fichiers sources d'un projet 
 windows.CloseAll 
 
 Documents.Open ActiveProject.FullName, "Text" 
 set dsp = ActiveDocument 
 dsp.Selection.MoveTo 1,1 
 line = 0 
 do while(dsp.Selection.FindText("SOURCE=.*\{\.h\!\.c\!\.cpp\}$", dsMatchRegExp)=true) 
 	if (line>=dsp.Selection.CurrentLine) then 
   exit do 
 	end if 
 	Documents.Open mid(dsp.Selection.Text, 8) 
 	line = dsp.Selection.CurrentLine 
 Loop 
 dsp.close 
End Sub 
 
Sub superif() 
'DESCRIPTION: Insere un "if" 
 ActiveDocument.Selection.Text = "if (){" + chr(13) + "}" 
 ActiveDocument.Selection.MoveTo ActiveDocument.Selection.CurrentLine-1, 1, dsExtend 
 ActiveDocument.Selection.SmartFormat 
 ActiveDocument.Selection.FindText "(" 
 ActiveDocument.Selection.MoveTo ActiveDocument.Selection.CurrentLine, ActiveDocument.Selection.CurrentColumn 
 ActiveDocument.Selection.SmartFormat 
End Sub  
 
private function CompteLignesDeCodeInFile(filename) 
 length = 0 
 Documents.Open filename 
 ActiveDocument.Selection.SelectAll 
 length = ActiveDocument.Selection.BottomLine 
 ActiveDocument.Close 
 CompteLignesDeCodeInFile = length 
end function 
 
Sub EnterBug() 
'DESCRIPTION: "Solve" the ENTER-bug ! 
 
 ActiveDocument.Selection.Text = chr(13) 
End Sub 
 
Sub FabOneTimeInclude() 
'DESCRIPTION: Include a header ONE time 
 On Error Resume Next 
 
 dim name 
 name = ActiveDocument.Name 
 if Right(name, 2) <> ".h" then 
 	exit sub 
 end if 
 
 curr_ligne = ActiveDocument.Selection.CurrentLine 
 curr_col = ActiveDocument.Selection.CurrentColumn 
 
 ActiveDocument.Selection.StartOfDocument 
 dim Id 
 Id = "__" + UCase(Left(name, Len(name)-2)) + "_H__" 
 ActiveDocument.Selection.Text = "#ifndef " + Id + chr(13) _ 
 	+ "#define " + Id + chr(13) + chr(13) 
 
 ActiveDocument.Selection.EndOfDocument 
 ActiveDocument.Selection.Text = chr(13) + chr(13) + "#endif // " + Id 
 
 ActiveDocument.Selection.MoveTo curr_ligne + 3, curr_col  
End Sub 
 
Sub RemoveFalseTab() 
'DESCRIPTION: A description was not provided. 
 
 curr_ligne = ActiveDocument.Selection.CurrentLine 
 curr_col = ActiveDocument.Selection.CurrentColumn-1 
 
    if curr_col=0 then exit sub 
 
    char_left = curr_col mod 4 
    if char_left=0 then char_left=4 
    PrintToOutputWindow char_left 
 
 ActiveDocument.Selection.MoveTo curr_ligne, curr_col-char_left+1, dsExtend 
 
 ActiveDocument.Selection.Text = RTrim(ActiveDocument.Selection.Text) 
 
End Sub 
 
Private sub DoMakeBuildDate() 
 ActiveProject.AddFile "buildate.h" 
 DoBeforeBuildStart() 
end sub 
 
sub MakeBuildDate() 
 On Error Resume Next 
 DoMakeBuildDate() 
end sub 
 
 
 
Private sub DoBeforeBuildStart() 
 Documents.Open "buildate.h" 
 ActiveDocument.Selection = "#define BUILD_DATE " 
 ActiveDocument.Save() 
 FabOneTimeInclude() 
end sub 
 
sub dummyApplication_BeforeBuildStart() 
 On Error Resume Next 
 DoBeforeBuildStart() 
end sub 
 
 
private Sub DoSelLen() 
 msgbox len(ActiveDocument.Selection), vbOKOnly+vbInformation, "Selection len" 
end sub 
 
Sub SelLen() 
 'DESCRIPTION: A description was not provided. 
 on error resume next 
 DoSelLen()  
End Sub 
 
start = 0 
 
sub Application_BeforeBuildStart() 
 start = Now 
end sub 
 
sub Application_BuildFinish(nNumErrors, nNumWarnings) 
 t = DateDiff("s", start, Now) 
 sss = int(t mod 60) 
 mmm = int((t/60) mod 60) 
 hhh = int(t/3600) 
 res = "Build done in "  
 if hhh>0 then 
 	res = res & cstr(hhh) & "h " & cstr(mmm) & "mn " & cstr(sss) & "s" 
 else 
 	if mmm>0 then 
   res = res & cstr(mmm) & "mn " & cstr(sss) & "s" 
 	else 
   res = res & cstr(sss) & "s" 
 	end if 
 end	if 
 PrintToOutputWindow res 
end sub 
 
Sub ToggleSource() 
'DESCRIPTION: toggle between .h and .cpp 
 
 filename = None 
 
 if lcase(right(ActiveDocument.Name, 2))=".h" then 
 	'on error resume next 
 	filename = left(ActiveDocument.FullName, len(ActiveDocument.FullName)-2)+".cpp" 
 	Documents.Open(filename) 
 elseif lcase(right(ActiveDocument.Name, 4))=".cpp" then 
 	'on error resume next 
 	filename = left(ActiveDocument.FullName, len(ActiveDocument.FullName)-4)+".h" 
 	Documents.Open(filename) 
 end if 
 
 if filename<>None then 
 	for each cpt in documents 
   if cpt.FullName=filename then 
   	cpt.active = 1 
   	exit for 
   end if 
 	next 
 end if 
  
End Sub 
 
Marsh Posté le 05-07-2002 à 01:58:44
DJ_ThOnY: Je le rajouterai peut-être. 
Pour connaître tous les autres raccourçis clavier, faire menu  "Help/Keyboard Map". 
Cliquez sur les titre pour trier. 
 
fabsk: 
On sent qu'il y a du travail derrière ! 
Encadre ton code avec la balise [fixed], ce sera plus lisible.
Marsh Posté le 04-06-2002 à 11:38:35
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.
Téléchargeable au format rtf zippé: http://musaran.free.fr/cpp/Trucs_VC6.zip
Quelques raccourcis:
souris
On peut glisser/déposer le texte sélectionné.
-Ctrl (maintenu) =copier au lieu de déplacer.
-Alt (maintenu) =sélection d'un rectangle de texte (reste un rectangle quand collé).
-Clic dans la marge=sélection de lignes.
-Double-clic =sélection de mot.
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élection d'un rectangle de texte au curseur.
+Shift =sélectionner en déplaçant le curseur avec n?importe laquelle des commandes précédentes.
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).
édition
-Ctrl+L =couper ligne(s).
-Ctrl+Shift+T =permute deux mots.
-Alt+Shift+T =permute deux lignes.
-Ins =permute les mode insertion/refrappe de texte.
-Alt+F8 =indente correctement la sélection.
-Tab =augmente l'indentation des lignes sélectionnées (+Shift=diminue).
-Ctrl+U =mettre en minuscules (+Shift=majuscules).
-Ctrl+Backspace =effacer le mot devant.
-Ctrl+Del =effacer le mot derrière.
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 =affiche 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.
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.
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).
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( .
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:
Divers
Si vous avez appelé l'aide par F1, cliquez sur le bouton sommaire (ou localiser) de la barre d'outils (pas l'onglet) pour voir dans quelle rubrique vous êtes.
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.
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
Pour composer sa barre d'outils:
On peut déplacer un outil en maintenant Alt enfoncé (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.
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).
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.
É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".
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.
Instructions de déboguage (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>
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.
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.
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 :
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
Il y en a d'autres à la rubrique "Symbols for Watch Variables" dans la MSDN.
Quelques includes pratiques
#include <limits.h> //valeurs min/max des types de base. Ex: INT_MAX est le maximum d?un int.
#include <limits> //idem en C++. Ex: numeric_limits<int>::max est le maximum d?un int.
Quelques constantes symboliques prédéfinies
ANSI
__STDC__ C standard
NDEBUG Not Debug
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
spécifique Microsoft
_MSC_VER Version du compilateur Microsoft
__cplusplus Source C++
_DLL Contexte Mutithread (avec DLL)
_MT Contexte Mutithread
_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 multibyte-character
_DEBUG Mode debug
Message édité par Musaran le 03-07-2002 à 04:27:02
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone