c assert assertion handling c with examples
Ta vadnica za uveljavljanje C ++ razkriva trditve v jeziku C ++, ki so izjave za preizkus domnev v programu, ki ga je naredil programer:
kako odpreti datoteko .key v operacijskem sistemu Windows 10
V programu C ++ običajno predpostavimo, da mora biti indeks matrike večji od nič.
Ko se te predpostavke uresničijo, program zažene dobro, ko pa te predpostavke postanejo napačne, se program ne konča normalno.
=> Obiščite tukaj za celoten tečaj strokovnjakov za C ++.
Kaj se boste naučili:
Trditve v jeziku C ++
Trditev je izjava v jeziku C ++, ki preizkuša stanje, kot je razloženo zgoraj. Če je pogoj resničen, se program nadaljuje normalno in če je napačen, se program zaključi in prikaže se sporočilo o napaki.
Trditev lahko zagotovimo z uporabo makra predprocesorja za uveljavitev.
S celim številom myInt lahko trditev, da mora biti myInt> 0, razglasimo na naslednji način.
assert (myInt > 0);Recimo, da je podana vrednost myInt -1, zato trditev ne uspe, ko prevajalnik naleti na zgornji stavek, saj je vrednost myInt -1. Ko trditev ne uspe, se skupaj z imenom in številko vrstice izda sporočilo z neveljavno trditvijo in program se konča.
Splošni prototip trditve je naslednji:
uveljavljati (pogoj), kjer je pogoj => izraz skalarnega tipa
Uveljavitev je predprocesorski makro, ki se uporablja za ovrednotenje pogojnega izraza. Če pogojni izraz oceni kot false, potem se program po prikazu sporočila o napaki zaključi. Sporočilo o napaki je običajno sestavljeno iz neuspešnega pogojnega izraza, imena kodne datoteke in številke vrstice trditve.
Tako spoznamo, kje je prišlo do težave, pa tudi, kaj se je zgodilo v kodi. Z uporabo trditev je odpravljanje napak bolj učinkovito.
Glava C ++< cassert > vsebuje funkcijo uveljavljanja. Funkcijo uveljavljanja v kodi večinoma uporabljamo za preverjanje, ali so parametri, posredovani funkciji, veljavni, za preverjanje vrnjene vrednosti funkcije ali med drugim za preverjanje meja polja.
Osnovni primer trditve C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Izhod:

V zgornjem programu smo uporabili klic uveljavljanja, ki vsebuje izraz (myInt! = NULL) v funkciji display_number. Najprej v glavni funkciji posredujemo kazalno spremenljivko second_ptr, ki vsebuje naslov spremenljivke myptr. Ko je ta klic izveden, je trditev resnična. Zato je izvajanje programa normalno in vrednost je prikazana.
V drugem klicu display_number posredujemo ničelni kazalnik in s tem izberemo false. Tako se pri drugem klicu prikaže sporočilo o trditvi ni uspelo, kot je prikazano v izhodu.
Onemogočanje trditve z NDEBUG
Ko uporabljamo trditve, se preverijo med izvajanjem. Trditve omogočajo učinkovito odpravljanje napak, vendar je treba paziti, da trditev ne vključite v različico za izdajo aplikacije. To je zato, ker vemo, da ko sprostimo aplikacijo, to storimo šele, ko smo prepričani, da je aplikacija temeljito preizkušena.
Torej moramo ob izdaji programske opreme onemogočiti vse trditve. Trditve v programu lahko onemogočimo z uporabo makra NDEBUG. Uporaba makra NDEBUG v programu onemogoči uveljavitev vseh klicev.
V program lahko vključimo spodnjo vrstico, da onemogočimo vse trditve.
#define NDEBUG Naslednji programi C ++ kažejo, kako se program obnaša, ko je komentiran NDEBUG, in ko je NDEBUG aktiven.
# 1) NDEBUG je naveden, vendar komentiran.
#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
'; } Izhod:
kako zagnati datoteke .jar v operacijskem sistemu Windows 10

V tem programu smo podali stavek #define NDEBUG, vendar ga komentiramo. To pomeni, da je izjava uveljavljanja aktivna. Ko se program izvrši, drugi klic za uveljavitev vrne false in sporočilo o napaki utripa in program se prekine.
# 2) NDEBUG je aktiven.
#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
'; } Izhod:

V tem programu smo razkomentirali makro NDEBUG. Zdaj, ko zaženemo program, stavki za uveljavitev niso več aktivni. Zato program nadaljuje z običajnim izvajanjem, tudi če je drugi pogoj v izjavi uveljavitev napačen.
Tako smo s komentarjem vrstice #define NDEBUG onemogočili izjave za uveljavitev v programu.
Uveljavi in static_assert
Trditev, ki smo jo videli do zdaj, se izvede v času izvajanja. C ++ podpira še eno obliko uveljavljanja, znano kot static_assert, in izvaja preverjanje trditev v času prevajanja. Prisoten je od C ++ 11.
Static_assert ima naslednjo splošno sintakso.
static_assert (bool_constexpr, message)Tu je bool_constexpr => ckontekstno pretvorjen konstanten izraz tipa bool.
Sporočilo => Niz, ki bo prikazan kot sporočilo o napaki, če bool_constexpr ne bo.
Torej, če bool_constexpr oceni na true, program deluje normalno. Če bool_constexpr oceni na false, se izda napaka prevajalnika.
Spodnji program prikazuje uporabo static_assert v programu C ++.
#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
'; } Izhod:

V zgornjem programu smo static_assert pripravili z izrazom in sporočilom. Ko ne uspe, se izda napaka prevajalnika, kot je prikazano v izhodu.
Pogosto zastavljena vprašanja
V # 1) Kaj je Assert v jeziku C ++?
Odgovor: Trditev v jeziku C ++ je vnaprej določen makro, s pomočjo katerega lahko preizkusimo nekatere predpostavke, ki so nastavljene v programu. Ko je pogojni izraz v izjavi za uveljavitev nastavljen na true, program nadaljuje normalno. Ko pa je izraz false, se izda sporočilo o napaki in program se konča.
V # 2) Kaj je static_assert?
Odgovor: Static_assert se oceni v času prevajanja v primerjavi s stavkom assert (), ki se oceni med izvajanjem.
Static_assert je vključen v C ++ od C ++ 11 naprej. Pogojni izraz in sporočilo je treba prikazati kot argumenta. Ko se stanje oceni na false, se izda napaka prevajalnika in prikaže sporočilo. Nato se program zaključi.
V # 3) Kaj je namen makra assert ()?
Odgovor: Makro Assert () se uporablja za preizkušanje pogojev ali predpostavk, ki se ne bi smele pojaviti v programu. Na primer indeks polja mora biti vedno> 0. Druga predpostavka je lahko 2 + 2 == 3 + 1.
Torej z uporabo assert () lahko preizkusimo takšne predpostavke in dokler se ocenijo kot resnične, naš program deluje normalno. Ko so napačne, se program zaključi.
kako posodobim svoj bios windows 10
Zaključek
V tej vadnici smo videli delovanje stavkov assert () v jeziku C ++. Stavek assert () je definiran v glavi. Uveljavitev lahko onemogočimo z uporabo makra NDEBUG. Razvijalci morajo biti previdni, da trditve ni mogoče uporabiti v proizvodni kodi, saj se pričakuje, da je proizvodna koda temeljito preizkušena in brez napak.
Poleg izjave assert () C ++ 11 podpira tudi static_assert (), ki se oceni v času prevajanja. Ko static_asset () oceni na false, se izda napaka prevajalnika in program se zaključi.
Trditve so način za preizkus predpostavk v programu in z ovrednotenjem pogojnih izrazov znotraj trditev lahko program temeljito preizkusimo in odpravljanje napak postane učinkovitejše.
=> Tukaj preverite VSE Vadnice za C ++.
Priporočeno branje
- Vadnica za ravnanje z izjemami C # s primeri kode
- Primeri uveljavljanja selena - praktične uporabe v projektih
- Struktura programa C # in osnovna sintaksa s primeri
- Vadnica Python DateTime s primeri
- Izreži ukaz v Unixu s primeri
- Sintaksa ukaza Unix Cat, možnosti s primeri
- Uporaba kazalca v MongoDB s primeri
- Ls ukaz v Unixu s primeri



