c assert assertion handling c with examples
Denna C ++ Assert-handledning belyser påståenden i C ++ som är uttalanden för att testa antagandena i programmet som gjorts av programmeraren:
stresstestverktyg för webbapplikation
I ett C ++ - program antar vi vanligtvis antaganden i ett program som att ett arrayindex ska vara större än noll.
När dessa antaganden går i uppfyllelse går programmet böter men när dessa antaganden blir falska slutar inte programmet normalt.
=> Besök här för en komplett C ++ - kurs från experter.
Vad du kommer att lära dig:
Påståenden i C ++
En påstående är ett uttalande i C ++ som testar för ett tillstånd som det som förklaras ovan. Om villkoret är sant fortsätter programmet normalt och om villkoret är falskt avslutas programmet och ett felmeddelande visas.
Vi kan tillhandahålla ett påstående med hjälp av ett assert preprocessor-makro.
Med heltalet myInt kan vi förklara ett påstående som säger att myInt ska vara> 0 på följande sätt.
assert (myInt > 0);
Antag att värdet för angiven myInt är -1, så att påståendet misslyckas när kompilatorn stöter på ovanstående uttalande eftersom myInt-värdet är -1. När påståendet misslyckas utfärdas ett meddelande om ogiltigt påstående tillsammans med programnamnet och radnumret och programmet avslutas.
En allmän prototyp av påståendet är som följer:
hävda (villkor) där villkor => uttryck för skalartyp
En påstående är ett förprocessormakro som används för att utvärdera ett villkorligt uttryck. Om det villkorliga uttrycket utvärderas falskt avslutas programmet efter att felmeddelandet visas. Felmeddelandet består vanligtvis av det misslyckade villkorliga uttrycket, namnet på kodfilen och radnumret för påståendet.
Således lär vi oss var problemet uppstod samt vad som är problemet som uppstod i koden. Användning av påståenden gör därför felsökning effektivare.
C ++ - rubriken< kassett > innehåller påståendefunktionaliteten. Vi använder mestadels assertfunktionen i koden för att kontrollera om parametrarna som skickas till en funktion är giltiga, för att kontrollera returvärdet för en funktion eller för att kontrollera matrisgränserna bland annat.
Grundläggande exempel på C ++ påstående.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Produktion:

I ovanstående program har vi använt ett påståendeanrop som innehåller uttrycket (myInt! = NULL) i display_number-funktionen. I huvudfunktionen skickar vi först en pekervariabel second_ptr som innehåller adressen till variabeln myptr. När det här samtalet görs är påståendet sant. Därför är programkörning normalt och värdet visas.
I det andra samtalet till display_number passerar vi nollpekaren och gör därmed assert false. När sålunda det andra samtalet görs visas meddelandet misslyckat som visas i utgången.
Inaktivera påstående med NDEBUG
När vi använder påståenden kontrolleras de vid körning. Påståenden gör felsökning effektiv, men man bör vara försiktig så att inte påståenden ingår i versionens version av applikationen. Detta beror på att vi vet att när vi släpper en ansökan gör vi det bara när vi är säkra på att applikationen testas grundligt.
Så vi måste inaktivera alla påståenden när vi släpper programvaran. Vi kan inaktivera påståenden i ett program med hjälp av NDEBUG-makro. Användning av NDEBUG-makro i ett program inaktiverar alla samtal för att hävda.
Vi kan inkludera en rad nedan i programmet för att inaktivera alla påståenden.
#define NDEBUG
Följande C ++ - program visar hur programmet beter sig när NDEBUG kommenteras och när NDEBUG är aktivt.
# 1) NDEBUG specificerade men kommenterade.
#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:
hur man öppnar en torrentfil

I det här programmet har vi angett #define NDEBUG-uttalandet men kommenteras. Detta betyder att påståendet är aktivt. Således när programmet körs returnerar det andra anropet att hävda falskt och ett felmeddelande blinkar och programmet avbryts.
# 2) NDEBUG är aktivt.
#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 detta program avmarkerade vi NDEBUG-makrot. Nu när vi kör programmet är påståendena inte mer aktiva. Därför fortsätter programmet sitt normala utförande även när det andra villkoret i påståendet är falskt.
Således genom att avmarkera raden #define NDEBUG har vi inaktiverat påståendeförklaringarna i programmet.
Assert And static_assert
Påståendet som vi har sett hittills utförs vid körning. C ++ stöder ännu en annan form av påståenden som kallas static_assert och den utför kompileringstidskontroll. Den är närvarande sedan C ++ 11.
En static_assert har följande allmänna syntax.
static_assert (bool_constexpr, message)
Här bool_constexpr => cContextually konverterade konstant uttryck av typen bool.
Meddelande => Sträng som visas som ett felmeddelande om bool_constexpr är falskt.
Så om bool_constexpr utvärderas till true fortsätter programmet normalt. Om bool_constexpr utvärderas till falskt utfärdas ett kompileringsfel.
Nedanstående program visar användningen av static_assert i ett 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 ovanstående program har vi gett static_assert ett uttryck och ett meddelande. När det misslyckas utfärdas ett kompileringsfel som visas i utgången.
Vanliga frågor
F # 1) Vad är påståendet i C ++?
Svar: En påstående i C ++ är ett fördefinierat makro där vi kan testa vissa antaganden som ställs in i programmet. När det villkorliga uttrycket i ett påståendeställning är satt till sant fortsätter programmet normalt. Men när uttrycket är falsk utfärdas ett felmeddelande och programmet avslutas.
F # 2) Vad är static_assert?
Svar: Static_assert utvärderas vid kompileringstidpunkten mot assert () -uttalandet som utvärderas vid körningstid.
Static_assert har införlivats i C ++ från och med C ++ 11. Det kräver att det villkorliga uttrycket och ett meddelande visas som argument. När villkoret utvärderas till falsk utfärdas ett kompileringsfel och meddelandet visas. Programmet avslutas sedan.
F # 3) Vad är syftet med assert () -makro?
Svar: Assert () -makro används för att testa de villkor eller antaganden som inte ska förekomma i ett program. Till exempel, matrisindex bör alltid vara> 0. Ett annat antagande kan vara 2 + 2 == 3 + 1.
Så med hjälp av assert () kan vi testa sådana antaganden och så länge de utvärderas till sant, körs vårt program normalt. När de är falska avslutas programmet.
hur öppnar jag en jar-fil
Slutsats
I denna handledning har vi sett hur assert () uttalanden fungerar i C ++. Uttrycket assert () definieras i rubriken. Vi kan inaktivera påståendet med NDEBUG-makro. Utvecklare bör vara försiktiga så att påståenden inte kan användas i produktionskoden eftersom det förväntas att produktionskoden testas noggrant och är felfri.
Bortsett från påståendet () uttalande C ++ 11 stöder också static_assert () som utvärderas vid sammanställningstidpunkten. När static_asset () utvärderas till falsk utfärdas ett kompileringsfel och programmet avslutas.
Påståenden är ett sätt att testa antagandena i programmet och genom att utvärdera de villkorliga uttrycken i påståenden kan vi testa programmet noggrant och felsökningen blir effektivare.
=> Kontrollera ALLA C ++ -handledning här.
Rekommenderad läsning
- C # Handledning för undantagshantering med kodexempel
- Exempel på påståenden av selen - praktiska tillämpningar i projekt
- C # Programstruktur och grundläggande syntax med exempel
- Python DateTime-handledning med exempel
- Klipp kommandot i Unix med exempel
- Unix Cat Command Syntax, alternativ med exempel
- Användning av markören i MongoDB med exempel
- Ls Command i Unix med exempel