cassert
Főnév
cassert (tsz. casserts)
- (informatika) A
casserta C++ szabványos könyvtárának egy fejléce, amely azassertmakrót tartalmazza. Azassert(á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
assertsegí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.
NDEBUGmakróval kikapcsolható.