c assert assertion handling c with examples
Denne C ++ Assert-selvstudie belyser påstande i C ++, som er udsagn til at teste antagelserne i programmet lavet af programmøren:
bedste sikkerhedskopieringssoftware til Windows 10 gratis
I et C ++ - program antager vi normalt antagelser i et program, som om et matrixindeks skal være større end nul.
Når disse antagelser går i opfyldelse, kører programmet bøden, men når disse antagelser bliver falske, slutter programmet ikke normalt.
=> Besøg her for det komplette C ++ kursus fra eksperter.
Hvad du lærer:
Påstande i C ++
En påstand er en erklæring i C ++, der tester for en tilstand som den, der er forklaret ovenfor. Hvis betingelsen er sand, fortsætter programmet normalt, og hvis betingelsen er falsk, afsluttes programmet, og der vises en fejlmeddelelse.
Vi kan give en påstand ved hjælp af en assert preprocessor makro.
Med heltalet myInt kan vi erklære en påstand om, at myInt skal være> 0 på følgende måde.
assert (myInt > 0);
Antag, at værdien af den angivne myInt er -1, hvorfor påstanden mislykkes, når compileren møder ovenstående udsagn, da myInt-værdien er -1. Når påstanden mislykkes, udsendes en meddelelse om ugyldig påstand sammen med programnavnet og linjenummeret, og programmet afsluttes.
En generel prototype af hævder er som følger:
hævde (betingelse) hvor betingelse => udtryk for skalartype
En påstand er en forprocessormakro, der bruges til at evaluere et betinget udtryk. Hvis det betingede udtryk evalueres falsk, afsluttes programmet efter visning af fejlmeddelelsen. Fejlmeddelelsen består typisk af det mislykkede betingede udtryk, navnet på kodefilen og påstandens linjenummer.
Således lærer vi at vide, hvor problemet opstod, samt hvad der er problemet, der opstod i koden. Derfor gør brug af påstande debugging mere effektiv.
C ++ -hovedet< kassetter > indeholder påstået funktionalitet. Vi bruger for det meste assert-funktionaliteten i koden til at kontrollere, om de parametre, der sendes til en funktion, er gyldige, for at kontrollere returværdien af en funktion eller for at kontrollere arraygrænserne blandt andet.
Grundlæggende eksempel på C ++ påstand.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Produktion:

I ovenstående program har vi brugt et assert-kald, der indeholder udtrykket (myInt! = NULL) i display_number-funktionen. I hovedfunktionen sender vi først en markørvariabel second_ptr, der indeholder adressen på variablen myptr. Når dette opkald foretages, er påstanden sand. Derfor er programudførelse normal, og værdien vises.
I det andet opkald til display_number passerer vi nulmarkøren og gør dermed hævder falsk. Når det andet opkald således foretages, vises meddelelsen mislykket påstand som vist i output.
Deaktivering af påstand med NDEBUG
Når vi bruger påstande, kontrolleres de ved kørselstid. Påstande gør debugging effektiv, men man skal være opmærksom på ikke at medtage påstande i frigivelsen af applikationen. Dette skyldes, at vi ved, at når vi frigiver en ansøgning, gør vi det kun, når vi er sikre på, at applikationen testes grundigt.
Så vi er nødt til at deaktivere alle påstande, når vi frigiver softwaren. Vi kan deaktivere påstande i et program ved hjælp af NDEBUG-makroen. Brug af NDEBUG-makroen i et program deaktiverer alle opkald til at hævde.
Vi kan inkludere en linje nedenfor i programmet for at deaktivere alle erklæringer om påstand.
#define NDEBUG
Efter C ++ - programmer vises, hvordan programmet opfører sig, når NDEBUG kommenteres, samt når NDEBUG er aktiv.
# 1) NDEBUG specificeret men kommenteret.
#include // uncomment to disable assert() //#define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Asset disabled...execution continuous with invalid expression
'; }
Produktion:
hvordan man åbner en torrentfil

I dette program har vi angivet #define NDEBUG-sætningen, men er kommenteret. Dette betyder, at påstanden er aktiv. Når programmet således udføres, returnerer det andet opkald til at hævne falsk, og en fejlmeddelelse blinker, og programmet afbrydes.
# 2) NDEBUG er aktiv.
#include // uncomment: assert() disabled #define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Produktion:

I dette program fjernede vi kommentar til NDEBUG-makroen. Nu når vi udfører programmet, er udsagnene ikke mere aktive. Derfor fortsætter programmet sin normale udførelse, selv når den anden betingelse i erklæringen er falsk.
Således ved at kommentere linjen #define NDEBUG har vi deaktiveret påstandene i programmet.
Påstand og statisk_assert
Påstanden, som vi hidtil har set, udføres på kørselstid. C ++ understøtter endnu en form for påstand kendt som static_assert, og den udfører kompileringstidskontrol. Det er til stede siden C ++ 11.
En static_assert har følgende generelle syntaks.
static_assert (bool_constexpr, message)
Her bool_constexpr => c Kontekstkonverteret konstant udtryk for typen bool.
Besked => Streng, der vises som en fejlmeddelelse, hvis bool_constexpr er falsk.
Så hvis bool_constexpr evalueres til sand, fortsætter programmet normalt. Hvis bool_constexpr evalueres til falsk, udstedes en compiler-fejl.
Nedenstående program viser brugen af static_assert i et C ++ - program.
#include #include using namespace std; int main() { assert(2+2==3+1); static_assert(2+2==3+1, '2+2 = 3+1'); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); static_assert(2+2==1+1, '2+2 != 1+1'); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Produktion:

I ovenstående program har vi forsynet static_assert med et udtryk og en besked. Når det mislykkes, udstedes en compilerfejl som vist i output.
hvordan man tilføjer element til array java
Ofte stillede spørgsmål
Q # 1) Hvad er Assert i C ++?
Svar: En påstand i C ++ er en foruddefineret makro, hvor vi kan teste visse antagelser, der er indstillet i programmet. Når det betingede udtryk i en erklæring er sat til sand, fortsætter programmet normalt. Men når udtrykket er falsk, udsendes en fejlmeddelelse, og programmet afsluttes.
Q # 2) Hvad er static_assert?
Svar: Static_assert evalueres ved kompileringstidspunktet i forhold til erklæringen assert (), der evalueres på kørselstidspunktet.
Static_assert er blevet indarbejdet i C ++ fra og med C ++ 11. Det kræver det betingede udtryk og en besked, der skal vises som argumenter. Når betingelsen evalueres til falsk, udstedes en kompilatorfejl, og meddelelsen vises. Programmet afsluttes derefter.
Q # 3) Hvad er formålet med assert () makro?
Svar: Assert () makro bruges til at teste de betingelser eller antagelser, der ikke skal forekomme i et program. For eksempel, matrixindekset skal altid være> 0. En anden antagelse kan være 2 + 2 == 3 + 1.
Så ved hjælp af assert () kan vi teste sådanne antagelser, og så længe de vurderes til sandt, kører vores program normalt. Når de er falske, afsluttes programmet.
Konklusion
I denne vejledning har vi set arbejdet med assert () udsagn i C ++. Påstanden () erklæring er defineret i overskriften. Vi kan deaktivere påstanden ved hjælp af NDEBUG-makroen. Udviklere skal være forsigtige med at hævde ikke kan bruges i produktionskoden, da det forventes, at produktionskoden testes grundigt og er fejlfri.
Bortset fra erklæringen assert () understøtter C ++ 11 også static_assert (), der evalueres på kompileringstidspunktet. Når static_asset () evalueres til falsk, udstedes en compiler-fejl, og programmet afsluttes.
Påstande er en måde at teste antagelserne i programmet på og ved at evaluere de betingede udtryk inden for påstande, kan vi teste programmet grundigt, og fejlretning bliver mere effektiv.
=> Tjek ALLE C ++ tutorials her.
Anbefalet læsning
- C # Exception Handling Tutorial med kodeeksempler
- Eksempler på selenpåstand - Praktiske anvendelser i projekter
- C # Programstruktur og grundlæggende syntaks med eksempler
- Python DateTime-tutorial med eksempler
- Klip kommando i Unix med eksempler
- Unix Cat Command Syntax, indstillinger med eksempler
- Brug af markør i MongoDB med eksempler
- Ls Command i Unix med eksempler