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 2025

Video: 12 Things NOT to do in Japan 2025
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

Hvordan man vælger vielsesringe

Hvordan man vælger vielsesringe

Selvom brudgommen handler solo til forlovelsesringen, sporer par normalt hinanden om deres vielsesringe. Nogle vælger matchende vielsesringe, men det behøver du ikke. Hvis du vil have et almindeligt guldband og din forlovede ønsker noget mere avanceret, er der ingen grund til, at du ikke begge kan have det, du vil have. Vælg en ...

Hvordan man holder styr på bryllupsgaver

Hvordan man holder styr på bryllupsgaver

Mister sporet af bryllupsgaver og deres givere kan være et mareridt . I det øjeblik du åbner en bryllupsgave, skriv ned hvad det er, hvem gav det til dig og datoen. Disse oplysninger kan gå på et indekskort med gæstens øvrige oplysninger i et regneark. Optag også, når du sender hver ...

Hvordan man vælger en forlovelsesring - dummier

Hvordan man vælger en forlovelsesring - dummier

Bragt til dig af Engagement og vielsesringe kommer i et stort udvalg af stilarter og materiale. Når man handler for forlovelses- og vielsesringe, går mange par sammen - eller i det mindste forudforhandler sammen, så hver person har en ide om den andens smag. Når du vælger ringe, skal du overveje din livsstil og prisklasse, og ...

Valg af editor

Forbedre dine Excel-rapporter ved de-Emphasizing Borders - dummies

Forbedre dine Excel-rapporter ved de-Emphasizing Borders - dummies

Borddesign er en af ​​de mest undervurderede bestræbelser i Excel-rapportering. Tro det eller ej, grænser kommer i vejen for hurtigt at læse dataene i en tabel. Fordi grænserne hjælper med at adskille data i pænt opdelte sektioner, kan det virke kontraintuitivt, men virkeligheden er, at bordets grænser er det første, du ...

Identificere problemet, som din finansielle model skal løse - dummies

Identificere problemet, som din finansielle model skal løse - dummies

En økonomisk model er normalt bygget for at besvare et spørgsmål eller at løse et problem. For eksempel spørgsmålet "Skal jeg købe dette nye aktiv? "Kan resultere i en model, der indeholder cash flow analyse, som sammenligner cash flow, hvis aktivet er købt versus, hvis det ikke købes. "Hvor meget skal ...

Sådan bruges VBA-regnearkfunktioner i Excel 2016 - dummies

Sådan bruges VBA-regnearkfunktioner i Excel 2016 - dummies

Selvom VBA tilbyder et anstændigt sortiment af bygget - i funktioner, kan du ikke altid finde præcis, hvad du har brug for. Heldigvis kan du også bruge de fleste af Excels regnearkfunktioner i dine VBA-procedurer. De eneste regnearkfunktioner, som du ikke kan bruge, er dem, der har en tilsvarende VBA-funktion. For eksempel kan du ikke bruge Excel's RAND ...

Valg af editor

Sådan går du ind i en Ham Radio Contact - dummies

Sådan går du ind i en Ham Radio Contact - dummies

Nogle gange kan du ikke vente på slutningen af ​​en kontakt til at ringe til en skinke radiostation. Afbrydelse af en anden kontakt kaldes at bryde ind (eller bryde). Den rigtige procedure er at vente på en pause i kontakten og hurtigt sige "Break" (eller send BK med Morse kode) efterfulgt af dit kaldesignal. Hvorfor gør du ...

Basics of High Frequency (HF) Ham Radios - Dummies

Basics of High Frequency (HF) Ham Radios - Dummies

Alle moderne skinke radioer har perfekt brugbar modtagelse og transmittere ydeevne. Forskellene involverer ydeevne på flere nøgleområder, såsom evnen til at modtage i nærvær af stærke signaler, signalfiltrering og filterstyringsfunktioner, dækning af et eller flere VHF / UHF-bånd, driftsfunktioner såsom subreceivers og antal indbyggede i antenne tunere. HF-radioer ...

Sådan vælger du en Ham Radio Antenne - Dummies

Sådan vælger du en Ham Radio Antenne - Dummies

Det er svært at sige, hvilket er vigtigt for en skinke radio operatør: radioen eller antennen. At klare mangler i en ved at forbedre den anden er vanskelig. En god antenne kan gøre en svag radio lyd bedre end den anden vej. Du skal give antennevalg mindst lige så meget ...