Accueil Finances personnelles 10 Façons d'éviter les bogues en C ++ - des mannequins

10 Façons d'éviter les bogues en C ++ - des mannequins

Table des matières:

Vidéo: Le débogueur JavaScript (VSCode, Google Chrome) [M0L09] 2025

Vidéo: Le débogueur JavaScript (VSCode, Google Chrome) [M0L09] 2025
Anonim

Il est regrettable que vous passiez plus de temps à chercher et à supprimer des bogues que vous ne passerez réellement à écrire vos programmes C ++. Les suggestions ici peuvent vous aider à réduire le nombre d'erreurs que vous introduisez dans vos programmes pour faire de la programmation une expérience plus agréable.

Activer tous les avertissements et les messages d'erreur

La syntaxe de C ++ permet de nombreuses vérifications d'erreurs. Lorsque le compilateur rencontre une construction qu'il ne peut tout simplement pas déchiffrer, il n'a pas d'autre choix que de sortir un message. Il essaie de se synchroniser avec le code source (parfois avec moins de succès), mais il ne génère pas d'exécutable. Cela force le programmeur à corriger tous les messages d'erreur.

Cependant, quand C ++ rencontre une structure qu'il peut comprendre mais que la structure sent le poisson de toute façon, C ++ génère un message d'avertissement. Parce que C ++ est assez sûr qu'il comprend ce que vous voulez, il va de l'avant et crée un fichier exécutable afin que vous puissiez ignorer les avertissements si vous le souhaitez. En fait, si vous ne voulez vraiment pas être dérangé, vous pouvez désactiver les avertissements.

Désactiver ou ignorer les avertissements est une très mauvaise idée. C'est un peu comme si on débranchait le voyant «vérifier le moteur» sur le tableau de bord de votre voiture parce que cela vous dérange. Ignorer le problème ne le fait pas disparaître.

L'écriture d'un code C ++ dans un style clair et cohérent améliore non seulement la lisibilité de votre programme, mais entraîne également moins d'erreurs de codage. Cette situation quelque peu surprenante résulte du fait que notre cerveau n'a qu'une puissance de calcul limitée.

Lorsque vous lisez un code propre et soigné et qui suit un style que vous connaissez, vous passez très peu de temps à analyser la syntaxe des instructions C ++. Cela laisse plus de puissance CPU pour décoder ce que le programme essaie de faire et non comment il le fait.

Un bon style de codage vous permet de faire facilement les choses suivantes:

Différencier les noms de classe, les noms d'objet et les noms de fonction

  • Comprendre la classe, la fonction ou l'objet, en fonction de son nom

  • Différencier les symboles du préprocesseur des symboles C ++ (c'est-à-dire que les objets #define doivent ressortir)

  • Identifier les blocs de code C ++ au même niveau (résultat d'une indentation cohérente)

  • De plus, vous devez établir un format standard pour vos en-têtes de module qui fournit des informations sur les fonctions ou les classes de chaque module, l'auteur, la date, la version et quelque chose sur l'historique des modifications.

Tous les programmeurs impliqués dans un même projet doivent utiliser le même style de codage. Un programme écrit dans un patchwork de différents styles de codage est confus et semble non professionnel.

Commentez le code pendant que vous l'écrivez

Vous pouvez éviter les erreurs si vous commentez votre code pendant que vous l'écrivez, plutôt que d'attendre que tout fonctionne, puis revenez en arrière et ajoutez des commentaires.

La formulation de commentaires vous oblige à faire le point sur ce que vous essayez de faire. De brefs commentaires sont éclairants, à la fois lorsque vous les lisez plus tard et que vous les écrivez. Écrivez les commentaires comme si vous parliez à un autre programmeur bien informé.

Effectuer une seule étape dans le débogueur au moins une fois

En tant que programmeur, vous devez comprendre ce que fait votre programme. Il ne suffit pas que le programme génère la valeur attendue. Vous devez comprendre tout ce que fait votre programme. Rien ne vous donne une meilleure idée de ce qui se passe sous le capot que le programme

single-step , en l'exécutant pas à pas avec un bon débogueur (comme celui fourni avec Code:: Blocks). Au-delà de cela, lorsque vous déboguez un programme, vous avez besoin de données brutes pour comprendre un comportement bizarre qui pourrait apparaître lorsque le programme s'exécute. Rien ne vous donne plus de matière que de faire un pas à travers chaque fonction quand elle entre en service.

Enfin, lorsqu'une fonction est terminée et prête à être ajoutée au programme, chaque chemin logique doit être parcouru au moins une fois. Les bogues sont beaucoup plus faciles à trouver lorsque vous examinez la fonction par elle-même plutôt qu'après avoir été jeté dans le pot avec le reste des fonctions - d'ici là, votre attention s'est portée sur de nouveaux défis de programmation.

Limiter la visibilité

Limiter la visibilité des classes internes au monde extérieur est la pierre angulaire de la programmation orientée objet. La classe devrait être responsable de son état interne - si quelque chose se fout dans la classe, alors c'est la faute du programmeur de classe. Le programmeur d'application devrait s'inquiéter de résoudre le problème à portée de main.

Plus précisément, une visibilité limitée signifie que les membres des données ne devraient pas être accessibles en dehors de la classe - c'est-à-dire qu'ils devraient être marqués comme protégés. En outre, les fonctions membres que le logiciel d'application n'a pas besoin de connaître doivent également être marquées comme protégées. N'exposez pas plus d'éléments internes que nécessaire pour faire le travail.

Gardez une trace de la mémoire du tas

Perdre la mémoire de tas est la source la plus courante d'erreurs fatales dans les programmes qui ont été lancés sur le terrain - et, en même temps, le plus difficile à localiser. (Parce que cette classe d'erreur est si difficile à trouver et à supprimer, elle est répandue dans les programmes que vous achetez.) Vous devrez peut-être exécuter un programme pendant des heures avant que les problèmes ne surviennent (selon la taille de la fuite).

En règle générale, les programmeurs doivent toujours allouer et libérer la mémoire heap au même niveau. "Si une fonction membre MyClass:: create () alloue un bloc de mémoire tas et le renvoie à l'appelant, alors il doit y avoir un membre MyClass:: release () qui le renvoie au tas.Plus précisément, MyClass:: create () ne devrait pas exiger que la fonction parent libère la mémoire.

Dans la mesure du possible, MyClass doit garder la trace de ces pointeurs de mémoire et les supprimer dans le destructeur.

Mettre à zéro les pointeurs après avoir supprimé ce qu'ils pointent

Assurez-vous de mettre à zéro les pointeurs après qu'ils ne sont plus valides; vous le faites en leur affectant la valeur nullptr. Les raisons de cette action deviennent claires avec l'expérience: Vous pouvez continuer à utiliser un bloc de mémoire qui a été retourné au tas et même pas le savoir. Un programme peut fonctionner correctement 99 pour cent du temps, ce qui rend très difficile de trouver le 1 pour cent des cas où le bloc est réaffecté et le programme ne fonctionne pas.

Si vous annulez les pointeurs qui ne sont plus valides et que vous essayez de les utiliser pour stocker une valeur (vous ne pouvez pas stocker quoi que ce soit à ou près de l'emplacement nul), votre programme se bloque immédiatement. Crashing sonne mal, mais ce n'est pas si cela pose un problème. Le problème est là; c'est simplement une question de savoir si vous le trouvez ou non avant de le mettre en production.

Utiliser des exceptions pour gérer les erreurs

Le mécanisme d'exception de C ++ est conçu pour gérer les erreurs de manière pratique et efficace. En général, vous devriez lancer un indicateur d'erreur plutôt que de renvoyer un indicateur d'erreur. Le code résultant est plus facile à écrire, lire et maintenir. D'ailleurs, d'autres programmeurs en sont venus à s'y attendre, et vous ne voudriez pas les décevoir, n'est-ce pas?

Limitez votre utilisation des exceptions aux vraies erreurs. Il n'est pas nécessaire de lancer une exception à partir d'une fonction qui renvoie un indicateur "ne fonctionne pas" si cela fait partie de la vie quotidienne de cette fonction.

Déclarer les destructeurs virtuels

N'oubliez pas de créer un destructeur pour votre classe si le constructeur alloue des ressources telles que la mémoire de segment qui doit être retournée lorsque l'objet atteint sa fin ultime. Après avoir créé un destructeur, n'oubliez pas de le déclarer virtuel.

"Mais", vous dites, "ma classe n'hérite de rien, et elle n'est pas sous-classée par une autre classe. "Oui, mais ça

pourrait devenir une classe de base dans le futur. Sauf si vous avez une bonne raison de ne pas déclarer le destructeur virtuel, faites-le lors de la création de la classe. Fournissez un constructeur de copie et un opérateur d'affectation surchargé

Si votre classe a besoin d'un destructeur, il a presque certainement besoin d'un constructeur de copie et d'un opérateur d'assignation surchargé. Si votre constructeur alloue des ressources telles que la mémoire heap, le constructeur de copie par défaut et l'opérateur d'affectation ne feront rien mais créeront des ravages en générant plusieurs pointeurs vers les mêmes ressources.

Lorsque le destructeur d'un de ces objets est appelé, il restaure les actifs. Quand le destructeur de l'autre copie arrive, il va tout bousiller.

10 Façons d'éviter les bogues en C ++ - des mannequins

Le choix des éditeurs

Comprendre les verrues génitales et l'herpès - les nuls

Comprendre les verrues génitales et l'herpès - les nuls

Un Américain sur quatre entre 15 et 55 ans se contractera au moins une maladie sexuellement transmissible. Plus vous en savez, plus vous pouvez empêcher que cela ne vous arrive. Ci-dessous, deux maladies incurables sont discutées. Verrues génitales Près de deux millions de personnes aux États-Unis sont infectées chaque année par ...

Ce qui se passe pendant les rapports sexuels - les nuls

Ce qui se passe pendant les rapports sexuels - les nuls

Rapports hétérosexuels se produisent chaque fois qu'un homme met son pénis dans le vagin d'une femme. C'est la définition minimale. Mais le sexe est à propos de plus que ce simple acte. En tant que tel, vous pouvez être curieux, ou vous pouvez vouloir savoir comment décrire le sexe à un adolescent. Les informations ci-dessous expliquent ce qui se passe exactement pendant ...

Qu'est-ce qu'un orgasme? - des mannequins

Qu'est-ce qu'un orgasme? - des mannequins

Certaines femmes se demandent si elles ont déjà eu un orgasme. Ce n'est pas une question ridicule, car de nombreuses femmes n'ont jamais atteint l'apogée, et d'autres éprouvent ce qu'on appelle un orgasme manqué. Donc, s'ils ont manqué un orgasme passager ou ne s'en sont même pas approchés, des millions de femmes (et quelques hommes) n'ont même pas ...

Le choix des éditeurs

En utilisant le moniteur au lieu du viseur sur votre Nikon D3100 - des mannequins

En utilisant le moniteur au lieu du viseur sur votre Nikon D3100 - des mannequins

Comme beaucoup de nouveaux reflex numériques caméras, le Nikon D3100 offre Live View, qui utilise le moniteur comme viseur lors de la prise de photos. Activer Live View est également la première partie du processus de prise de vue vidéo; en fait, vous devez utiliser le moniteur au lieu du viseur lorsque vous filmez des films. Utilisation de la vue en direct ...

En mode Live View et en mode vidéo Autofocus avec un Nikon D7000 - mannequins

En mode Live View et en mode vidéo Autofocus avec un Nikon D7000 - mannequins

Comme pour la photographie avec viseur , vous pouvez opter pour la mise au point automatique pendant la prise de vue Live View sur votre Nikon D7000, en supposant que votre objectif le supporte. Si vous utilisez l'objectif du kit (ou un similaire), réglez l'interrupteur de l'objectif sur la position A. Les étapes suivantes expliquent le choix des réglages de l'autofocus, puis ...

Le choix des éditeurs

Notions de base sur l'électronique: Alternateurs

Notions de base sur l'électronique: Alternateurs

Vous aurez besoin d'apprendre un peu sur le courant alternatif (AC), si vous souhaitez utiliser une alimentation CA dans vos circuits électroniques. Un bon moyen de comprendre comment ca fonctionne est de regarder l'appareil le plus souvent utilisé pour le générer: l'alternateur. Un alternateur est un appareil qui ...

ÉLectronique Notions de base: PN Jonctions - nuls

ÉLectronique Notions de base: PN Jonctions - nuls

Seuls, type P (charge positive) et les semi-conducteurs de type N (chargés négativement) ne sont que des conducteurs. Mais si vous les mettez ensemble sur un circuit électronique, vous créez une jonction p-n et une chose intéressante et très utile se produit: Le courant peut circuler à travers la jonction p-n, mais seulement dans une direction. Si vous mettez une tension positive sur ...