c assert assertion handling c with examples
Denne C ++ Assert-opplæringen belyser påstander i C ++ som er uttalelser for å teste forutsetningene i programmet laget av programmereren:
hvordan du bruker css-velgeren i selen
I et C ++ - program legger vi vanligvis antakelser i et program som at en matriseindeks skal være større enn null.
Når disse antagelsene går i oppfyllelse, kjører programmet boten, men når disse antagelsene blir falske, slutter ikke programmet normalt.
=> Besøk her for hele C ++ kurset fra eksperter.
Hva du vil lære:
Påstander i C ++
En påstand er en uttalelse i C ++ som tester for en tilstand som den som er forklart ovenfor. Hvis tilstanden er oppfylt, fortsetter programmet normalt, og hvis tilstanden er falsk, avsluttes programmet og en feilmelding vises.
Vi kan gi en påstand ved hjelp av en assert preprosessor-makro.
Med heltallet myInt kan vi erklære en påstand som sier at myInt skal være> 0 på følgende måte.
assert (myInt > 0);
Anta at verdien til myInt spesifisert er -1, derfor mislykkes påstanden når kompilatoren møter utsagnet ovenfor som myInt-verdien er -1. Når påstanden mislykkes, utstedes en melding om ugyldig påstand sammen med programnavnet og linjenummeret, og programmet avsluttes.
En generell prototype av påstand er som følger:
hevder (tilstand) der tilstand => uttrykk for skalartype
En påstand er en preprosessor-makro som brukes til å evaluere et betinget uttrykk. Hvis det betingede uttrykket evalueres som usant, avsluttes programmet etter feilmeldingen. Feilmeldingen består vanligvis av det mislykkede betingede uttrykket, navnet på kodefilen og linjenummeret til påstanden.
Dermed får vi vite hvor problemet oppstod, samt hva som er problemet som oppstod i koden. Bruk av påstander gjør derfor feilsøking mer effektiv.
C ++ topptekst< kassett > inneholder påstandsfunksjonaliteten. Vi bruker for det meste påstandsfunksjonaliteten i koden for å sjekke om parameterne som sendes til en funksjon er gyldige, for å sjekke returverdien til en funksjon eller for å sjekke matrisegrensene blant annet.
Grunnleggende eksempel på C ++ påstand.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Produksjon:
I programmet ovenfor har vi brukt en assert-samtale som inneholder uttrykket (myInt! = NULL) i display_number-funksjonen. I hovedfunksjonen først passerer vi en pekervariabel second_ptr som inneholder adressen til variabelen myptr. Når dette anropet er gjort, er påstanden sant. Derfor er programutførelsen normal, og verdien vises.
I den andre samtalen til display_number, passerer vi nullpekeren og gjør påstanden falsk. Når den andre samtalen blir foretatt, vises en påstand som mislyktes, som vist i utgangen.
Deaktivering av påstand med NDEBUG
Når vi bruker påstander blir de sjekket ved kjøretid. Påstander gjør feilsøking effektiv, men man må være forsiktig med å ikke inkludere påstander i versjonen av applikasjonen. Dette er fordi vi vet at når vi slipper en applikasjon, gjør vi det bare når vi er sikre på at applikasjonen blir testet grundig.
Så vi må deaktivere alle påstandene når vi slipper programvaren. Vi kan deaktivere påstander i et program ved å bruke NDEBUG-makroen. Bruk av NDEBUG-makro i et program deaktiverer alle anrop for å hevde.
Vi kan inkludere en linje gitt nedenfor i programmet for å deaktivere alle uttalelser.
#define NDEBUG
Å følge C ++ - programmer viser hvordan programmet oppfører seg når NDEBUG kommenteres, samt når NDEBUG er aktivt.
# 1) NDEBUG spesifisert, men kommentert.
#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
'; }
Produksjon:
hvordan åpne en torrentfil
I dette programmet har vi spesifisert #define NDEBUG-setningen, men er kommentert. Dette betyr at påstanden er aktiv. Dermed når programmet kjøres, returnerer det andre anropet om å hevde falskt og en feilmelding blinkes og programmet avbrytes.
# 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
'; }
Produksjon:
I dette programmet har vi ikke kommentert NDEBUG-makroen. Nå når vi kjører programmet, er påstandene ikke mer aktive. Derfor fortsetter programmet sin normale utførelse selv når den andre betingelsen i påstanden er usann.
Dermed ved å fjerne merkingen av linjen #define NDEBUG, har vi deaktivert påstandene i programmet.
Påstand og statisk_assert
Påstanden som vi har sett så langt, blir utført på kjøretid. C ++ støtter enda en form for påstand kjent som static_assert og utfører kompileringstidskontroll. Den er tilstede siden C ++ 11.
En static_assert har følgende generelle syntaks.
static_assert (bool_constexpr, message)
Her bool_constexpr => cKontekstkonvertert konstant uttrykk for typen bool.
Melding => Streng som vises som en feilmelding hvis bool_constexpr er falsk.
Så hvis bool_constexpr evalueres til sant, fortsetter programmet normalt. Hvis bool_constexpr evalueres til false, utstedes en kompilatorfeil.
Programmet nedenfor viser bruken av 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
'; }
Produksjon:
I programmet ovenfor har vi gitt static_assert et uttrykk og en melding. Når det mislykkes, utstedes en kompilatorfeil som vist i utdataene.
ofte stilte spørsmål
Q # 1) Hva er Assert i C ++?
Svar: En påstand i C ++ er en forhåndsdefinert makro der vi kan teste visse forutsetninger som er satt i programmet. Når det betingede uttrykket i en påstand er satt til sant, fortsetter programmet normalt. Men når uttrykket er usant, utstedes en feilmelding og programmet avsluttes.
hva er nettverkssikkerhetsnøkkelen på en ruter
Q # 2) Hva er static_assert?
Svar: Static_assert evalueres ved kompileringstidspunktet i forhold til uttalelsen assert () som evalueres på kjøretid.
Static_assert er innlemmet i C ++ fra C ++ 11 og utover. Det tar det betingede uttrykket og en melding som skal vises som argumenter. Når tilstanden evalueres til falsk, utstedes en kompilatorfeil og meldingen vises. Programmet avsluttes deretter.
Q # 3) Hva er formålet med assert () makro?
Svar: Assert () makro brukes til å teste forholdene eller forutsetningene som ikke skal forekomme i et program. For eksempel, matriseindeksen skal alltid være> 0. En annen antagelse kan være 2 + 2 == 3 + 1.
Så ved hjelp av assert () kan vi teste slike antagelser, og så lenge de vurderes til sant, kjører programmet vårt normalt. Når de er falske, avsluttes programmet.
Konklusjon
I denne opplæringen har vi sett hvordan assert () -uttalelser fungerer i C ++. Påstanden () er definert i overskriften. Vi kan deaktivere påstanden ved hjelp av NDEBUG-makroen. Utviklere bør være forsiktige med at påstand ikke kan brukes i produksjonskoden, da det forventes at produksjonskoden testes grundig og er feilfri.
Bortsett fra påstanden () uttalelse støtter C ++ 11 også static_assert () som evalueres ved kompileringstidspunktet. Når static_asset () evalueres til false, utstedes en kompilatorfeil og programmet avsluttes.
Påstander er en måte å teste forutsetningene i programmet på, og ved å evaluere de betingede uttrykkene i påstandene, kan vi teste programmet grundig og feilsøking blir mer effektiv.
=> Sjekk ALLE C ++ opplæringsprogrammer her.
Anbefalt lesing
- C # Exception Handling Tutorial med kodeeksempler
- Eksempler på selenpåstand - Praktiske anvendelser i prosjekter
- C # Programstruktur og grunnleggende syntaks med eksempler
- Python DateTime Tutorial med eksempler
- Klipp kommandoen i Unix med eksempler
- Unix Cat Command Syntax, Alternativer med eksempler
- Bruk av markør i MongoDB med eksempler
- Ls Command i Unix med eksempler