Ugrás a tartalomhoz

cassert

A Wikiszótárból, a nyitott szótárból


Főnév

cassert (tsz. casserts)

  1. (informatika) A cassert a C++ szabványos könyvtárának egy fejléce, amely az assert makrót tartalmazza. Az assert (állítás, ellenőrzés) egy hibakeresési eszköz, amely futás közben ellenőrzi, hogy egy adott feltétel teljesül-e. Ha a feltétel hamis (false), akkor a program hibaüzenettel leáll.



assert makró működése

A assert makrót tipikusan hibaellenőrzésre és debug célokra használják. Szintaxisa:

#include <cassert>

assert(kifejezés);

Ha a kifejezés értéke false (hamis), akkor az assert leállítja a programot, és hibaüzenetet jelenít meg, amely tartalmazza: - az állítás hibás voltát, - a forrásfájlt, ahol az assert van, - a sor számát, ahol a hiba történt.

Ha a kifejezés true (igaz), akkor az assert nem csinál semmit, és a program normálisan fut tovább.



Példa használatra

#include <iostream>
#include <cassert>

int osztas(int a, int b) {
    assert(b != 0); // Ellenőrizzük, hogy a nevező nem 0
    return a / b;
}

int main() {
    int x = 10, y = 0;
    std::cout << osztas(x, 2) << std::endl; // Működik

    std::cout << osztas(x, y) << std::endl; // Hiba: assert leállítja a programot
    return 0;
}

Ha y = 0, a program futtatásakor a következő hibaüzenetet kapjuk:

Assertion failed: b != 0, file main.cpp, line 6

Ez jelzi, hogy a b != 0 feltétel hamis, ezért az assert leállította a programot.



assert kikapcsolása

Az assert csak akkor működik, ha a program NDEBUG makró nélkül van fordítva. Ha a NDEBUG makrót meghatározzuk (define), az assert hívásokat a fordító figyelmen kívül hagyja.

Példa kikapcsolásra:

#define NDEBUG
#include <cassert>

int main() {
    assert(2 + 2 == 5); // Ez NDEBUG esetén NEM állítja le a programot
    return 0;
}

Ha a NDEBUG definiálva van, akkor az assert(2 + 2 == 5); nem csinál semmit.



Mikor használjuk az assert-et?

Hibakereséshez (debugging): Ellenőrzi a változók érvényességét fejlesztés közben.
Előfeltételek ellenőrzésére: Pl. egy függvény paramétereinek ellenőrzése.
Belső programhibák és invariánsok tesztelésére: Pl. nem várt esetek leállítása.

Mikor NE használjuk?
- Felhasználói bevitel ellenőrzésére: Az assert nem helyettesíti a hibakezelést (pl. if és throw).
- Éles (production) kódban, mert NDEBUG kikapcsolhatja, és a feltétel ellenőrzése elmarad.



Összegzés

  • assert segít futás közben ellenőrizni, hogy egy feltétel teljesül-e.
  • Ha a feltétel false, a program hibával leáll.
  • Fejlesztéshez hasznos, de nem helyettesíti a hibakezelést.
  • NDEBUG makróval kikapcsolható.