Hem Personliga finanser 10 Sätt att undvika fel i C ++ - dummies

10 Sätt att undvika fel i C ++ - dummies

Innehållsförteckning:

Video: DIY Night Routine Life Hacks! 30 DIY Hacks - DIY Makeup, Healthy Recipes & Room Decor 2024

Video: DIY Night Routine Life Hacks! 30 DIY Hacks - DIY Makeup, Healthy Recipes & Room Decor 2024
Anonim

Det är ett olyckligt faktum att du kommer att spendera mer tid på att leta efter och ta bort buggar än du kommer att spendera faktiskt att skriva dina C ++-program i första hand. Förslagen här kan hjälpa dig att minimera antalet fel du introducerar i dina program för att göra programmeringen till en mer njutbar upplevelse.

Aktivera alla varningar och felmeddelanden

Synkroniseringen av C ++ möjliggör en hel del felkontroll. När kompilatorn möter en konstruktion som den inte kan dechiffrera, har den inget annat val än att skriva ut ett meddelande. Det försöker synkronisera säkerhetskopiering med källkoden (ibland mindre än framgångsrikt), men det kommer inte att generera en körbar. Detta tvingar programmeraren att fixa alla felmeddelanden.

Men när C ++ kommer över en struktur som den kan räkna ut men strukturen lukter i alla fall, genererar C ++ ett varningsmeddelande. Eftersom C ++ är ganska säker på att det förstår vad du vill, går det vidare och skapar en körbar fil så att du kan ignorera varningar om du vill. Faktum är att om du verkligen inte vill vara störd kan du inaktivera varningar.

Att inaktivera eller på annat sätt ignorera varningar är en utomordentligt dålig idé. Det är lite som att koppla från "Check Engine" -ljuset på bilens instrumentpanel eftersom det stör dig. Att ignorera problemet gör det inte att gå iväg.

Antag en tydlig och konsekvent kodningsstil

Att skriva din C ++-kod i en tydlig och konsekvent stil förstärker inte bara läsbarheten för ditt program utan resulterar också i färre kodningsfel. Detta något överraskande tillstånd beror på det faktum att våra hjärnor har en begränsad mängd datorkraft.

När du läser kod som är rent och snyggt och det följer en stil du känner till, spenderar du väldigt lite hjärnkraft som analyserar syntaxen i C ++-uttalandena. Detta låter mer hjärnens CPU-ström att avkoda vad programmet försöker göra och inte hur det gör det.

Med en bra kodningssätt kan du enkelt göra följande:

  • Skill mellan klassnamn, objektnamn och funktionsnamn

  • Förstå vad klassen, funktionen eller objektet används för, baserat på dess namn

  • Differentiera preprocessorsymboler från C ++-symboler (det vill säga #define-objekt ska sticka ut)

  • Identifiera block av C ++-kod på samma nivå (detta är resultatet av konsekvent indragning)

I Dessutom måste du skapa ett standardformat för dina modulhuvuden som ger information om funktionerna eller klasserna i varje modul, författaren, datumet, versionen och något om ändringshistoriken.

Alla programmerare som är inblandade i ett enda projekt ska använda samma kodningsstil. Ett program som skrivs i ett lapptäcke av olika kodningsstilar är förvirrande och ser oprofessionellt ut.

Kommentera koden medan du skriver den

Du kan undvika fel om du kommenterar koden medan du skriver den, istället för att vänta tills allt fungerar och sedan gå tillbaka och lägga till kommentarer.

Formulera kommentarer tvingar dig att ta reda på vad det är du försöker göra. Korta kommentarer är upplysande, både när du läser dem senare och när du skriver dem. Skriv kommentarer som om du pratar med en annan, kunnig programmerare.

Enkelt steg varje sökväg i debugger minst en gång

Som programmerare måste du förstå vad ditt program gör. Det är inte tillräckligt att programmet matar ut det förväntade värdet. Du måste förstå allt ditt program gör. Ingenting ger dig en bättre känsla för vad som händer under huven än single-step programmet, genom att göra det steg för steg med en bra debugger (som den som kommer med Code:: Blocks).

Utöver det, när du felsöker ett program behöver du råmaterial för att räkna ut lite bisarrt beteende som kan uppstå när programmet körs. Ingenting ger dig det materialet bättre än att stega genom varje funktion när det kommer i bruk.

När en funktion är färdig och redo att läggas till programmet måste varje logisk väg resta minst en gång. Buggar är mycket lättare att hitta när du undersöker funktionen själv i stället för efter att den har kastats i grytan med resten av funktionerna - då har din uppmärksamhet gått vidare till nya programutmaningar.

Begränsa synligheten

Att begränsa klassens internals synlighet till omvärlden är en hörnsten i objektorienterad programmering. Klassen ska vara ansvarig för sitt interna tillstånd - om någonting blir inkopplat i klassen, så är det klassprogrammerarens fel. Applikationsprogrammeraren borde oroa sig för att lösa problemet vid handen.

Särskilt innebär begränsad synlighet att datadeledamöter inte ska vara tillgängliga utanför klassen - det vill säga de ska märkas som skyddade. Dessutom måste medlemsfunktioner som applikationsprogrammet inte behöver veta om det också vara märkt skyddat. Utsätt inte mer av klassens internals än vad som behövs för att få jobbet gjort.

Håll koll på heapminne

Förlorade spår av heapminne är den vanligaste källan till dödliga fel i program som har släppts ut i fältet - och samtidigt det svåraste problemet att spåra och ta bort. (Eftersom den här klassen av fel är så svår att hitta och ta bort, är den vanlig i program som du köper.) Du kan behöva köra ett program i timmar innan problem uppstår (beroende på hur stor minnesläckan är).

Som regel bör programmerare alltid allokera och släppa heapminne på samma nivå. "Om en medlem funktion MyClass:: create () allokerar ett block med heapminne och returnerar det till den som ringer, då borde det finnas en medlem MyClass:: release () som returnerar den till högen.Specifikt bör MyClass:: create () inte kräva att moderfunktionen släpper ut minnet.

Om det är möjligt borde MyClass hålla koll på sådana minnespekare på egen hand och radera dem i destructorn.

Nollpunktsindikatorer efter borttagning av vad de pekar på

Se till att du nollar ut pekare efter att de inte längre är giltiga. du gör det genom att tilldela dem värdet nullptr. Anledningen till denna åtgärd blir tydlig med erfarenhet: Du kan fortsätta att använda ett minnesblock som har returnerats till högen och vet inte ens det. Ett program kan fungera bra 99 procent av tiden, vilket gör det mycket svårt att hitta 1 procent av fallen där blocken omfördelas och programmet inte fungerar.

Om du nollställer pekare som inte längre är giltiga och du försöker använda dem för att lagra ett värde (du kan inte lagra någonting vid eller nära nullplatsen), kommer ditt program att krascha omedelbart. Krasning låter dåligt, men det är inte om det utsätter ett problem. Problemet är där; det är bara en fråga om huruvida du hittar det eller inte innan du sätter den i produktion.

Använd undantag för att hantera fel

Undantagsmekanismen i C ++ är utformad för att hantera fel på ett bekvämt och effektivt sätt. I allmänhet bör du kasta en felindikator snarare än att returnera en felflagga. Den resulterande koden är lättare att skriva, läsa och underhålla. Dessutom har andra programmerare kommit att förvänta sig det, och du skulle inte vilja svika dem, skulle du?

Begränsa din användning av undantag till verkliga fel. Det är inte nödvändigt att kasta ett undantag från en funktion som returnerar en "fungerade" indikator om det här är en del av vardagen för den funktionen.

Förklara destructorer virtuella

Glöm inte att skapa en destructor för din klass om konstruktören allokerar resurser som heapminne som måste returneras när objektet når sin ultimata bortgång. Har skapat en destructor, glöm inte att förklara den virtuell.

"Men," säger du, "min klass arv inte från någonting, och den är inte underklassad av en annan klass. "Ja, men det kan bli en basklass i framtiden. Om du inte har någon bra anledning att inte förklara destruktorn virtuell, gör så när du först skapar klassen.

Ge en kopiekonstruktör och överbelastad uppdragsoperatör

Om din klass behöver en destructor behöver den nästan en kopikonstruktör och en överbelastad uppdragsoperatör. Om din konstruktör allokerar resurser som heapminne, gör standardkonstruktören och uppdragsoperatören inget annat än att skapa förödelse genom att generera flera pekare till samma resurser.

När destruktorn för ett av dessa objekt åberopas, kommer det att återställa tillgångarna. När destruktorn för den andra kopian kommer med, kommer den att skruva upp saker.

10 Sätt att undvika fel i C ++ - dummies

Redaktörens val

Hur man tar bort eller minimerar webbdelar i SharePoint 2013 - dummies

Hur man tar bort eller minimerar webbdelar i SharePoint 2013 - dummies

Du har två alternativ för att ta bort en webbdel från din SharePoint-sida - stängning eller radering. Att stänga en webbdel lämnar webbdelen på sidan så att du kan aktivera den igen för framtida användning. Att ta bort webbdelen tar bort webbdelen från din sida (men tar inte bort den från SharePoint). Till ...

För att ladda ner Apps från SharePoint Store - dummies

För att ladda ner Apps från SharePoint Store - dummies

Förutom de appar som följer med SharePoint, Du kan också lägga till appar från tredje part. Dessa tredjepartsprogram visas i SharePoint-butiken. Om du använder SharePoint Online har du tillgång till hela butiken. Om du använder SharePoint On-Premise kan dina lokala IT-administratörer ha låst ned de appar som ...

Hur man visar visningar via webbdelar i SharePoint 2013 - dummies

Hur man visar visningar via webbdelar i SharePoint 2013 - dummies

Du vill visa din SharePoint appdata med annan text och webbdelar på flera platser, till exempel hemsidor för hemsida, webbsidor eller publiceringssidor. I dessa situationer vill du inte att dina användare ska interagera med själva appen med alla redigeringsalternativ. Du vill bara att de ska se flera ...

Redaktörens val

Vad är Kik? - dummies

Vad är Kik? - dummies

Grundades 2009, är Kik en gratis snabbmeddelandeprogram utvecklad från Kik Interactive. Kik är tillgängligt på Android, Windows Phone och iOS-enheter. Applikationen är modellerad efter BlackBerry Messenger. Kik använder den befintliga smarttelefonens dataplan eller Wi-Fi för att skicka och ta emot meddelanden, videoklipp, foton, mobila webbsidor, skisser och annat innehåll. ...

ÖVersätt Twitter Slang och Jargon - dummies

ÖVersätt Twitter Slang och Jargon - dummies

Diskussioner om och om Twitter är fulla med alla slags förkortningar och jargong som kan förvirra nya Twitter-användare. Vad talar folk om (och tweeting) om? Följande ordlista definierar några av de förvirrande förkortningarna och Twitter-lingo du kan komma över. AFAIK: Så vitt jag vet. bot: Ett konto som drivs av en ...

Vad är Letgo? - dummies

Vad är Letgo? - dummies

Letgo är en mobil klassificerad applikation som tillåter användare att köpa från och sälja till andra lokalt. Du kan använda Letgo till fyndbutik eller slutligen släppa på saker som samlar damm runt ditt hus. I likhet med andra classifieds-applikationer som Wallapop eller Craigslist kommer säljare att skicka ett objekt och vänta på en köpare ...

Redaktörens val

Vanliga kodningsfel - dummies

Vanliga kodningsfel - dummies

Koden fungerar inte? Här är några vanliga misstag som kan gå upp till och med även den mest erfarna kodaren. Om din kod inte kommer att köras, försök att springa ned den här checklistan för att se om du har några av dessa fel: Har inte en slutlig HTML-tagg efter varje öppnande HTML-tagg . Saknade parentes i ...

Grundläggande kodningsordförråd - dummies

Grundläggande kodningsordförråd - dummies

Kodning har ett omfattande vokabulär som för lekmän kan verka som ogenomtränglig technobabble. Oavsett om du läser kodningsrelaterad artikel online eller pratar med en utvecklare på jobbet hörs det kanske ord som du inte har hört förut eller som har en annan mening i en kodande kontext. Här är några vanliga ordförrådsord att veta: Allmänt ...