Si vous utilisez presque tous les mappages de clavier Visual Studio, tapez Ctrl + J pour afficher IntelliSense. Dans Visual Studio 2012, IntelliSense devrait apparaître automatiquement en C ++. Dans Visual Studio 2010 et versions antérieures, vous devez l’appeler manuellement..
Les extraits de code sont une nouvelle fonctionnalité de C ++ dans Visual Studio 2012. Ils n'existaient pas dans les versions antérieures. Si vous ne les avez jamais utilisés dans aucune langue, commencez à taper «for» dans un projet C # pour commencer une boucle for; Une fois qu'IntelliSense a choisi l'extrait for, appuyez deux fois sur la touche de tabulation et regardez comme une boucle for apparaît avec des champs automatiques que vous pouvez modifier. Utilisez la touche Tab pour basculer entre les champs. Lorsque vous avez terminé de modifier les champs, appuyez sur Entrée. Le curseur sera transporté dans le corps de la boucle avec les modifications de champs que vous avez faites apparaissant sous forme de texte normal.
Les extraits de code sont particulièrement utiles pour les instructions switch qui activent une énumération, car ils rempliront automatiquement cette instruction avec tous les membres de celle-ci..
En C ++, il ne suffit généralement pas d'inclure un fichier d'en-tête. Normalement, vous devez indiquer à l'éditeur de liens de créer des liens avec une bibliothèque qui implémente le code déclaré dans le fichier d'en-tête. Pour ce faire, vous devez modifier les propriétés du projet, accessibles dans le menu Projet sous Propriétés du nom de projet…
Dans les propriétés, sous Propriétés de configuration> Éditeur de liens> Entrée, l'un des champs est Dépendances supplémentaires. Voici une liste des fichiers .LIB avec lesquels vous souhaitez créer un lien, séparés par des points-virgules. Il devrait se terminer par% (AdditionalDependencies) afin que toutes les bibliothèques supplémentaires liées via MS Build soient ajoutées.
Par exemple, pour un jeu typique de style métropolitain DirectX 11, les éléments suivants peuvent s'afficher:
d2d1.lib; d3d11.lib; dxgi.lib; ole32.lib; windowscodecs.lib; dwrite.lib; xaudio2.lib; xinput.lib; mfcore.lib; mfplat.lib; mfreadwrite.lib; mfuuid.lib; % (Dépendances supplémentaires)
Si vous recevez une erreur de l'éditeur de liens vous indiquant qu'il ne trouve pas de définition de quelque chose que vous utilisez, recherchez la fonction ou la classe sur MSDN. la documentation vous indiquera à la fois le fichier d'en-tête et le fichier de bibliothèque dont vous avez besoin.
Si vous souhaitez afficher une approximation très proche du code d'assembly dans lequel votre code est compilé, dans les propriétés de votre projet, sous Propriétés de configuration> C / C ++> Fichiers de sortie, définissez l'option de sortie d'Assembler sur autre chose que Aucune liste..
Je recommanderais soit une liste d'assemblage uniquement (/ FA), soit une assemblée avec code source (/ FA). Assembly-Only Listing List saupoudre suffisamment de commentaires de numéro de ligne que vous pouvez généralement référencer avec vos fichiers de code source pour voir quel code C ++ correspond au code d'assembly. Cela peut être utile si vous voulez un endroit pour tout voir plutôt que de basculer entre ce que vous avez ouvert dans le fichier .ASM (J'utilise Notepad ++) et Visual Studio..
Notez que l'assembly généré utilise des macros MASM (recherchez-les sur MSDN). Si vous ne savez pas ce que signifie une instruction d'assemblage particulière (par exemple, LEA), vous pouvez effectuer une recherche sur Internet ou télécharger le manuel de programmation approprié sur le site d'Intel (en supposant que x86 / Itanium), le site d'AMD (en supposant x64) ou celui d'ARM Holding. site (en supposant ARM). Si vous n'avez jamais appris d'assemblage, je vous le recommande vivement (essayez de créer une application console Windows simple)..
Comprendre l'assemblage vous permet de mieux comprendre le fonctionnement réel des ordinateurs en interne. Combinez cela avec la connaissance que tous les ordinateurs sont câblés pour commencer à exécuter le même code chaque fois qu'ils sont allumés (traditionnellement le BIOS sur les PC, bien que celui-ci soit maintenant remplacé par UEFI), et le mystère de savoir comment et pourquoi les ordinateurs fonctionnent rapidement se faner.
Si vous rencontrez une erreur de construction qui semble complètement horrible, il est probable que cela vient de l'éditeur de liens. Vous verrez des messages comme celui-ci, par exemple:
Erreur 2 Erreur LNK2019: symbole externe non résolu "public: __thiscall SomeClass :: SomeClass (wchar_t const *)" (?? 0SomeClass @@ QAE @ PB_W @ Z) référencé dans la fonction "__cdecl DoQuelquechose (void)" (? Quelque chose @@ YAXXZ) D: \ VS2010Proj \ CppSandbox \ CppSandbox \ CppSandbox.obj CppSandbox
Tout ce que cela dit, c'est qu'il ne peut pas trouver une fonction que vous avez dit qu'il devrait pouvoir trouver. Dans ce cas, j'ai ajouté le mot clé inline à une définition de fonction constructeur dans le fichier CPP sans oublier de déplacer cette définition dans le fichier d'en-tête. Toutes les fonctions en ligne doivent être dans l'en-tête pour que l'éditeur de liens ne vous déteste pas.
Tous ces? S et @@ ands sont justement comment C ++ modifie des noms quand il a compilé le code dans des fichiers objet. La gestion des noms est cohérente en interne pour le compilateur en question, mais la norme ISO / CEI n’impose aucun schéma particulier pour la gestion des noms. Différents compilateurs peuvent et vont souvent modifier les choses différemment.
Normalement, si vous voyez un message d'erreur de construction horrible, il est probable qu'il provient de l'éditeur de liens et qu'il s'agisse d'une erreur de symbole non résolue. Si le message dit que vous ne pouvez pas trouver quelque chose que vous avez écrit, assurez-vous que votre déclaration dans le fichier d'en-tête correspond à la définition, généralement dans le fichier de code mais peut-être dans l'en-tête, ou peut-être avez-vous oublié de l'écrire ou avez-vous déclaré en ligne mais l'a toujours dans le fichier de code.
Un exemple de ceci est dans le cas précédent: mon SomeClass :: SomeClass (wchar_t const *)
fonction constructeur (j'écris toujours le type const, pas le type const, donc même ce bit est reconstruit).
S'il s'agit de la fonction ou du symbole d'une autre personne, il est fort probable que vous n'ayez pas indiqué à l'éditeur de liens le fichier .LIB qui le contient..
Dans .NET, vous ajoutez simplement une référence à un assemblage pour obtenir à la fois les bits de déclaration et la définition réelle. En C ++, la déclaration est le fichier d'en-tête, tandis que la définition du code inline excluant le code, qui doit également figurer dans le fichier d'en-tête, se trouve également dans une bibliothèque séparée. Recherchez le symbole manquant dans la bibliothèque MSDN et recherchez le nom du fichier de bibliothèque que vous devez ajouter..
Les erreurs de construction C ++ peuvent sembler effrayantes, en particulier lorsque vous recevez une erreur de construction impliquant un modèle. Ceux-ci peuvent vous donner envie de quitter. Mais non. Ne laissez jamais les messages d'erreur horribles gagner. D'abord, déterminez si cela provient du compilateur (il aura un format de numéro d'erreur C ####) ou de l'éditeur de liens (format de numéro d'erreur LNK ####).
Si cela provient du compilateur, cela signifie généralement une erreur de syntaxe. Vérifiez par exemple si vous avez oublié le pragma une fois en haut de votre fichier d’en-tête. Vous pouvez aussi utiliser un élément de la bibliothèque standard (par exemple,., endl
) mais a oublié d’avoir un espace de noms #using std; ou préfixez-le avec std :: (i.e. std :: endl
).
Vous pouvez faire l'un ou les deux, mais vous devez en faire au moins un. Certaines choses pourraient être dans un espace de noms différent. Dans Visual Studio 2010, certaines fonctionnalités figurent par exemple dans l'espace de noms stdext. Il en va de même pour les espaces de noms dans votre propre code.
Si vous n’avez pas de chance, allez sur MSDN et tapez la première partie du message d’erreur. Vous trouverez probablement des liens utiles vers des discussions sur les forums MSDN, sur StackOverflow, peut-être un article MSDN ou un article de blog MSDN - peut-être même que la page du code d'erreur elle-même vous donnera l'indice dont vous avez besoin. Si tout échoue, posez une question sur un site de forum: MSDN, le site StackExchange approprié ou App Hub..
Une erreur de l'éditeur de liens est généralement un symbole non résolu, ce qui signifie généralement que la déclaration et la définition ne correspondent pas, que l'en-tête est en ligne ou que la bibliothèque appropriée n'est pas ajoutée aux dépendances supplémentaires du projet dans les options de l'éditeur de liens du projet. Si c'est quelque chose d'autre, essayez les stratégies du paragraphe précédent; ils s'appliquent aussi bien aux erreurs de l'éditeur de liens qu'aux erreurs du compilateur.
Si vous faites beaucoup de développement en C ++, alors Visual Studio est certainement un environnement de développement intégré intéressant. Il a beaucoup plus à offrir que ce qui est décrit dans cet article. Je vous encourage donc à l'essayer et à explorer son large éventail de fonctionnalités..
Cette leçon représente un chapitre de C ++ Succinctly, un eBook gratuit de l’équipe de Syncfusion..