c assert assertion handling c with examples
Deze C ++ Assert-zelfstudie werpt licht op beweringen in C ++ die uitspraken zijn om de aannames in het programma van de programmeur te testen:
hoe u de standaardgateway beschikbaar maakt
In een C ++ -programma maken we meestal aannames in een programma, zoals een array-index groter dan nul zou moeten zijn.
Wanneer deze aannames uitkomen, draait het programma de boete, maar als deze aannames onjuist worden, eindigt het programma niet normaal.
Bezoek hier voor de complete C ++ cursus van experts.
Wat je leert:
Beweringen in C ++
Een assert is een instructie in C ++ die test op een conditie zoals hierboven uitgelegd. Als de voorwaarde waar is, gaat het programma normaal verder en als de voorwaarde niet waar is, wordt het programma beëindigd en wordt een foutmelding weergegeven.
We kunnen een bewering geven met behulp van een assert-preprocessormacro.
Met het gehele getal myInt kunnen we op de volgende manier een bewering declareren waarin staat dat myInt> 0 moet zijn.
Stel dat de waarde van de opgegeven myInt -1 is, daarom mislukt de bewering wanneer de compiler de bovenstaande instructie tegenkomt, aangezien de waarde van myInt -1 is. Als de bevestiging eenmaal mislukt, wordt er een bericht met de ongeldige bewering uitgegeven samen met de programmanaam en het regelnummer en wordt het programma beëindigd.
Een algemeen prototype van assert is als volgt:
assert (voorwaarde) waar voorwaarde => uitdrukking van scalair type
Een assert is een preprocessormacro die wordt gebruikt om een voorwaardelijke uitdrukking te evalueren. Als de voorwaardelijke uitdrukking false oplevert, wordt het programma beëindigd nadat het foutbericht is weergegeven. Het foutbericht bestaat doorgaans uit de mislukte voorwaardelijke uitdrukking, de naam van het codebestand en het regelnummer van de bewering.
Zo komen we te weten waar het probleem zich heeft voorgedaan en wat het probleem is dat zich in de code heeft voorgedaan. Daarom maakt het gebruik van beweringen het debuggen efficiënter.
De C ++ -header< cassert > bevat de assert-functionaliteit. We gebruiken meestal de assert-functionaliteit in de code om te controleren of de parameters die aan een functie zijn doorgegeven geldig zijn, om de retourwaarde van een functie te controleren of om onder andere de array-grenzen te controleren.
Basisvoorbeeld van C ++ Assertion.
Uitgang:
In het bovenstaande programma hebben we een assert-aanroep gebruikt die de uitdrukking (myInt! = NULL) in de functie display_number bevat. In de hoofdfunctie geven we eerst een pointervariabele second_ptr door die het adres van variabele myptr bevat. Wanneer deze oproep wordt gedaan, is de bewering waar. Daarom is de uitvoering van het programma normaal en wordt de waarde weergegeven.
In de tweede aanroep van display_number geven we de null-pointer door, waardoor assert false wordt gemaakt. Dus wanneer de tweede oproep wordt gedaan, wordt het bericht 'bevestiging mislukt' weergegeven zoals weergegeven in de uitvoer.
Bewering uitschakelen met NDEBUG
Als we beweringen gebruiken, worden ze tijdens runtime gecontroleerd. Beweringen maken het debuggen efficiënt, maar er moet op worden gelet dat u geen beweringen opneemt in de release-build van de toepassing. Dit komt omdat we weten dat wanneer we een applicatie vrijgeven, we dit alleen doen als we zeker weten dat de applicatie grondig is getest.
We moeten dus alle beweringen uitschakelen wanneer we de software vrijgeven. We kunnen beweringen in een programma uitschakelen met behulp van de NDEBUG-macro. Het gebruik van een NDEBUG-macro in een programma schakelt alle aanroepen om te bevestigen uit.
We kunnen een regel hieronder in het programma opnemen om alle beweringen uit te schakelen.
De volgende C ++ -programma's laten zien hoe het programma zich gedraagt wanneer NDEBUG wordt becommentarieerd en wanneer NDEBUG actief is.
# 1) NDEBUG gespecificeerd maar becommentarieerd.
Uitgang:
Japan VPN server
In dit programma hebben we de #define NDEBUG-instructie gespecificeerd, maar er wordt commentaar gegeven. Dit betekent dat de assert-instructie actief is. Dus wanneer het programma wordt uitgevoerd, retourneert de tweede aanroep om te bevestigen false en wordt een foutmelding weergegeven en wordt het programma afgebroken.
# 2) NDEBUG is actief.
Uitgang:
In dit programma hebben we de NDEBUG-macro verwijderd. Als we het programma nu uitvoeren, zijn de assert-statements niet meer actief. Daarom gaat het programma door met zijn normale uitvoering, zelfs als de tweede voorwaarde in de assert-instructie onwaar is.
Dus door de regel #define NDEBUG te verwijderen, hebben we de assert-instructies in het programma uitgeschakeld.
Beweren en static_assert
De bewering die we tot nu toe hebben gezien, wordt tijdens runtime uitgevoerd. C ++ ondersteunt nog een andere vorm van assert die bekend staat als de static_assert en het voert compilatietijd assertiecontrole uit. Het is aanwezig sinds C ++ 11.
Een static_assert heeft de volgende algemene syntaxis.
Hier bool_constexpr => cContextueel geconverteerde constante uitdrukking van het type bool.
Message => String die zal verschijnen als een foutmelding als bool_constexpr false is.
Dus als de bool_constexpr evalueert naar true, gaat het programma normaal verder. Als bool_constexpr evalueert naar false, wordt een compilatiefout uitgegeven.
Het onderstaande programma toont het gebruik van static_assert in een C ++ programma.
Uitgang:
In het bovenstaande programma hebben we static_assert voorzien van een uitdrukking en een bericht. Als het mislukt, wordt er een compilatiefout gegenereerd, zoals weergegeven in de uitvoer.
Veel Gestelde Vragen
V # 1) Wat is beweren in C ++?
Antwoord: Een bewering in C ++ is een vooraf gedefinieerde macro waarmee we bepaalde aannames kunnen testen die in het programma zijn ingesteld. Als de voorwaardelijke uitdrukking in een assert-instructie is ingesteld op true, gaat het programma normaal verder. Maar als de uitdrukking false is, wordt er een foutmelding gegeven en wordt het programma beëindigd.
Q # 2) Wat is static_assert?
Antwoord: Static_assert wordt geëvalueerd tijdens het compileren ten opzichte van de assert () - instructie die tijdens runtime wordt geëvalueerd.
Static_assert is vanaf C ++ 11 in C ++ opgenomen. Er zijn de voorwaardelijke uitdrukking en een bericht nodig om als argumenten te worden weergegeven. Als de voorwaarde onwaar wordt, wordt er een compilatiefout gegenereerd en wordt het bericht weergegeven. Het programma wordt dan beëindigd.
V # 3) Wat is het doel van assert () macro?
Antwoord: Assert () macro wordt gebruikt om de voorwaarden of aannames te testen die niet in een programma zouden moeten voorkomen. Bijvoorbeeld, de array-index moet altijd> 0 zijn. Een andere aanname kan 2 + 2 == 3 + 1 zijn.
Dus met assert () kunnen we dergelijke aannames testen en zolang ze evalueren naar waar, werkt ons programma normaal. Als ze vals zijn, wordt het programma beëindigd.
wat is de beste gratis mp3-downloader
Gevolgtrekking
In deze tutorial hebben we de werking van assert () - statements in C ++ gezien. De instructie assert () wordt gedefinieerd in de koptekst. We kunnen de bewering uitschakelen met behulp van de NDEBUG-macro. Ontwikkelaars moeten oppassen dat assert niet kan worden gebruikt in de productiecode, aangezien wordt verwacht dat de productiecode grondig wordt getest en vrij is van fouten.
Behalve de assert () instructie ondersteunt C ++ 11 ook static_assert () die wordt geëvalueerd tijdens het compileren. Wanneer static_asset () evalueert naar false, wordt een compilatiefout uitgegeven en wordt het programma beëindigd.
Beweringen zijn een manier om de aannames in het programma te testen en door de voorwaardelijke uitdrukkingen in beweringen te evalueren, kunnen we het programma grondig testen en wordt debuggen efficiënter.
Bekijk hier ALLE C ++ Tutorials.
Aanbevolen literatuur
- C # Tutorial voor het afhandelen van uitzonderingen met codevoorbeelden
- Voorbeelden van seleniumbeweringen - praktische toepassingen in projecten
- C # Programmastructuur en basissyntaxis met voorbeelden
- Python DateTime-zelfstudie met voorbeelden
- Snijd Commando in Unix met voorbeelden
- Unix Cat Command Syntax, opties met voorbeelden
- Gebruik van Cursor in MongoDB met voorbeelden
- Ls Command in Unix met voorbeelden