Hjem Personlig finansiering 10 Måder at undgå fejl i C ++ - dummies

10 Måder at undgå fejl i C ++ - dummies

Indholdsfortegnelse:

Video: 12 Things NOT to do in Japan 2024

Video: 12 Things NOT to do in Japan 2024
Anonim

Det er et uheldigt faktum, at du vil bruge mere tid på at søge efter og fjerne fejl, end du vil bruge faktisk at skrive dine C ++-programmer i første omgang. Forslagene her kan hjælpe dig med at minimere antallet af fejl, du introducerer i dine programmer, for at gøre programmeringen til en mere fornøjelig oplevelse.

Aktiver alle advarsler og fejlmeddelelser

Syntetikken i C ++ giver mulighed for en masse fejlkontrol. Når kompilatoren møder en konstruktion, som den ikke kan dechifrere, har den intet andet valg end at sende en besked. Det forsøger at synkronisere sikkerhedskopier med kildekoden (undertiden mindre end med succes), men det genererer ikke en eksekverbar. Dette tvinger programmøren til at rette alle fejlmeddelelser.

Men når C ++ kommer på tværs af en struktur, som den kan finde ud af, men strukturen lugter alligevel, opretter C ++ en advarselsmeddelelse. Fordi C ++ er temmelig sikker på, at det forstår, hvad du vil, går det videre og opretter en eksekverbar fil, så du kan ignorere advarsler, hvis du vil. Faktisk, hvis du virkelig ikke ønsker at blive generet, kan du deaktivere advarsler.

Deaktivering eller på anden måde at ignorere advarsler er en ekstraordinær dårlig idé. Det er lidt som at tage tænd for "Check Engine" -lyset på bilens instrumentbræt, fordi det plager dig. At ignorere problemet gør det ikke muligt at gå væk.

Vedtag en klar og ensartet kodestil

At skrive din C ++ kode i en klar og ensartet stil forbedrer ikke blot læsbarheden af ​​dit program, men det resulterer også i færre kodningsfejl. Denne noget overraskende situation skyldes, at vores hjerner kun har en begrænset mængde computerkraft.

Når du læser kode, der er ren og pæn og følger en stil, du er bekendt med, bruger du meget lidt hjernekraft, der analyserer syntaxen af ​​C ++-sætningerne. Dette giver mere hjerne-CPU-strøm til at afkode, hvad programmet forsøger at gøre, og ikke hvordan det gør det.

En god kodende stil gør det let for dig at gøre følgende:

  • Differentier mellem klassenavne, objekternavne og funktionsnavne

  • Forstå hvad klassen, funktionen eller objektet bruges til, baseret på navnet

  • Differentiate preprocessorsymboler fra C ++-symboler (det vil sige #definerede objekter skal skille sig ud)

  • Identificer blokke af C ++-kode på samme niveau (dette er resultatet af ensartet indrykning)

I Desuden skal du oprette et standardformat til dine moduloverskrifter, der indeholder oplysninger om funktioner eller klasser i hvert modul, forfatteren, datoen, versionen og noget om ændringshistorikken.

Alle programmører involveret i et enkelt projekt skal bruge den samme kodestil. Et program skrevet i et lappearbejde med forskellige kodningsstile er forvirrende og ser uprofessionelt ud.

Kommenter koden, mens du skriver den

Du kan undgå fejl, hvis du kommenterer din kode, mens du skriver den, i stedet for at vente, indtil alt fungerer, og derefter gå tilbage og tilføje kommentarer.

Formulering af kommentarer tvinger dig til at gøre rede for, hvad det er, du forsøger at gøre. Korte kommentarer er oplysende, både når du læser dem senere og som du skriver dem. Skriv kommentarer som om du snakker med en anden, kyndig programmør.

Enkeltstræk hver sti i debuggeren mindst en gang

Som programmør skal du forstå, hvad dit program gør. Det er ikke tilstrækkeligt, at programmet udsender den forventede værdi. Du skal forstå alt, hvad dit program gør. Intet giver dig en bedre følelse af hvad der sker under hood'en end single-stepping programmet, og udfører det trin for trin med en god debugger (som den der følger med Code:: Blocks).

Ud over det, når du fejler et program, har du brug for råmateriale til at finde ud af nogle bizarre adfærd, der kan opstå, når programmet kører. Intet giver dig det materiale bedre end single-step gennem hver funktion som det kommer i brug.

Endelig, når en funktion er færdig og klar til at blive tilføjet til programmet, skal hver logisk vej rejst mindst én gang. Bugs er meget nemmere at finde, når du undersøger funktionen i sig selv snarere end efter at den er blevet kastet i puljen med resten af ​​funktionerne - da har din opmærksomhed været på nye programmeringsudfordringer.

Begræns synligheden

Begrænsning af klassens internalsynlighed til omverdenen er en hjørnesten i objektorienteret programmering. Klassen skal være ansvarlig for sin interne tilstand - hvis noget bliver skruet op i klassen, så er det klassens programmørens fejl. Ansøgningsprogrammereren bør bekymre sig om at løse problemet ved hånden.

Specifikt betyder begrænset synlighed, at data medlemmer ikke skal være tilgængelige uden for klassen - det vil sige, de skal markeres som beskyttet. Desuden skal medlemsfunktioner, som applikationssoftwaren ikke behøver at vide om, også markeres beskyttet. Udsæt ikke mere af klassens internere end nødvendigt for at få arbejdet færdigt.

Hold øje med bunkehukommelse

At tabe bunkehukommelse er den mest almindelige kilde til fatale fejl i programmer, der er udgivet i feltet - og samtidig det sværeste problem at spore og fjerne. (Fordi denne klasse af fejl er så svært at finde og fjerne, er den udbredt i programmer, som du køber.) Du må muligvis køre et program i timer, før problemerne opstår (afhængigt af hvor stor hukommelseslækage er).

Programmerne skal som hovedregel altid allokere og frigive hukommelse på samme niveau. "Hvis et medlem funktion MyClass:: create () tildeler en blok af bunkehukommelse og returnerer den til opkalderen, så skal der være et medlem MyClass:: release (), der returnerer det til bunken.Specifikt, MyClass:: create () skal ikke kræve, at moderfunktionen frigiver hukommelsen.

Hvis det overhovedet er muligt, skal MyClass holde styr på sådanne hukommelsespegere alene og slette dem i destructoren.

Nul ud pointers efter at have slettet hvad de peger på

Sørg for, at du nulter pointers, når de ikke længere er gyldige; det gør du ved at tildele dem værdien nullptr. Årsagerne til denne handling bliver tydelige med erfaring: Du kan fortsætte med at bruge en hukommelsesblok, der er returneret til bunken og ikke engang ved det. Et program kan løbe fint 99 procent af tiden, hvilket gør det meget svært at finde de 1 procent af tilfælde, hvor blokken bliver reallokeret, og programmet virker ikke.

Hvis du sletter nulpegerne, der ikke længere er gyldige, og du forsøger at bruge dem til at gemme en værdi (du kan ikke gemme noget ved eller nær nulstedet), vil dit program straks gå ned. Krasning lyder dårligt, men det er ikke, hvis det udsætter et problem. Problemet er der; det er bare et spørgsmål om, om du finder det eller ej, før du sætter det i produktion.

Brug undtagelser til at håndtere fejl

Undtagelsesmekanismen i C ++ er designet til at håndtere fejl bekvemt og effektivt. Generelt skal du kaste en fejlindikator i stedet for at returnere et fejlflag. Den resulterende kode er lettere at skrive, læse og vedligeholde. Derudover har andre programmører kommet til at forvente det, og du vil ikke skuffe dem, ville du?

Begræns din brug af undtagelser til ægte fejl. Det er ikke nødvendigt at kaste en undtagelse fra en funktion, der returnerer en "fungerede" indikator, hvis dette er en del af hverdagen for den funktion.

Erklære destructorer virtuelle

Glem ikke at oprette en destructor til din klasse, hvis konstruktøren tildeler ressourcer som heaphukommelse, der skal returneres, når objektet når sin ultimative død. Efter at have oprettet en destructor, glem ikke at erklære det virtuelt.

"Men," siger du, "min klasse arver ikke fra noget, og den er ikke underklasse af en anden klasse. "Ja, men det kunne blive en base klasse i fremtiden. Medmindre du har en god grund til ikke at erklære destruktoren virtuel, så gør det, når du først laver klassen.

Giv en kopikonstruktør og overbelastet tildelingsoperatør

Hvis din klasse har brug for en destructor, har det næsten sikkert en kopikonstruktør og en overbelastet opgaveoperatør. Hvis din konstruktør tildeler ressourcer som heaphukommelse, vil standardkopieringskonstruktør og opgaveoperatør ikke gøre andet end skabe kaos ved at generere flere pointers til de samme ressourcer.

Når destruktoren til et af disse objekter er påberåbt, vil det genoprette aktiverne. Når destruktoren til den anden kopi kommer sammen, vil den skrue op.

10 Måder at undgå fejl i C ++ - dummies

Valg af editor

Routingprotokollvalgskriterier - dummies

Routingprotokollvalgskriterier - dummies

Folk bruger to grundlæggende metoder til klassificering af ruteprotokoller - hvor de bruges og af hvordan de beregner routing. Du kan se, hvordan du vælger protokoller baseret på, hvor du planlægger at bruge dem, måden protokollen håndterer data på, og hvordan din router vælger hvilken protokol der skal bruges, når mere end en ...

Indstilling af Cisco Device Timeouts - dummies

Indstilling af Cisco Device Timeouts - dummies

Uden at indstille timeout-indstillinger for Cisco Device Privileged EXEC-tilstand, dine sessioner forbliver åbne på ubestemt tid. Dette er især farligt for konsolporten. Uden timeout parametre aktiveret, hvis administratoren ikke logger ud, har en indtrenger adgang og ingen problemer får forhøjede tilladelser. For at undgå denne potentielt farlige situation behøver du kun skrive a ...

Router Ethernet-interfacekonfiguration - dummies

Router Ethernet-interfacekonfiguration - dummies

Du starter processen med at konfigurere router Ethernet-grænseflader ved at foretage en fysisk forbindelse til din router. Når du har etableret forbindelsen, kan du fortsætte med den grundlæggende konfiguration af Ethernet-, Fast Ethernet- eller Gigabit Ethernet-forbindelser. Tilslutning til din router For at starte din konfiguration skal du oprette forbindelse til din router og komme ind i ...

Valg af editor

Med fokus på nogle hurtige løsninger til fotofile - dummier

Med fokus på nogle hurtige løsninger til fotofile - dummier

På trods af alle kameraproducenters forsøg på at gør fotografering idiotsikker, vi laver alle stadig mindre end perfekte billeder. Nogle gange er vi problemet - vi er for tætte eller for langt væk, eller kan ikke finde ud af, hvordan du bruger kameraets tåbebeskyttelsesfunktioner. Nogle gange er problemet, at virkeligheden nøjagtigt nægter at overholde vores forventninger: Himlen er ...

Lær at kende dine Manga Studio Layer Typer - Dummies

Lær at kende dine Manga Studio Layer Typer - Dummies

Manga Studio giver et udvalg af lag typer til brug i dit arbejde. Når du lærer at forstå og forstå, hvordan lag fungerer, vil du spekulere på, hvordan du nogensinde har arbejdet uden dem. Her er en introduktion til, hvad Manga Studio har til opbevaring for dig i sin lag lineup: Raster Layer: Dette er det grundlæggende ...

Få dit mobilwebsted tildelt på sociale bogmærker - dummies

Få dit mobilwebsted tildelt på sociale bogmærker - dummies

Populariteten af ​​websider med antallet af stemmer, de får. Resultatet er, at disse websteder er gode ressourcer til folk, der ønsker at holde øje med, hvad der er populært online. De fleste tilbyder speciel software, der gør det nemt for alle at stemme på et websted. Få dit websted opført ...

Valg af editor

Automatisk opdatering af din journal i Outlook 2000 - dummies

Automatisk opdatering af din journal i Outlook 2000 - dummies

Stardat 2001: På Star Trek, Virksomheden gør trofast daglige poster i kaptajnens log. Kaptajnen registrerer oplysninger om de planeter, besætningen har udforsket, udlændinge, de har kæmpet, og de bizarre fænomener, de har observeret ud i det dybe rum, hvor ingen er gået før! Nu er det din tur. Bare ...

Slet og gendan kontakter i Outlook - dummies

Slet og gendan kontakter i Outlook - dummies

Med Outlook, du behøver ikke at rive sider ud af en papir adressebog for at slippe af med en persons oplysninger; bare slet kontakten. Slettede kontakter går til mappen Slette emner i Outlook, indtil næste gang du tømmer mappen Slette elementer, så du kan hente dem derfra, hvis du laver ...