assert - przerwanie pracy programu, jeśli wyrażenie jest
fałszywe
Standardowa biblioteka C (
libc,
-lc)
#include <assert.h>
void assert(scalar wyrażenie);
To makro może pomóc programistom znajdować
błędy w ich programach lub obsługiwać
wyjątki przez wywołanie awarii zapewniającej ograniczone
wyjście debugowania.
Jeśli
wyrażenie jest fałszywe (to jest równe
zeru),
assert() wyświetli błąd na standardowe
wyjście błędów i przerywa pracę programu
przez wywołanie
abort(3). Komunikat błędu zawiera
nazwę pliku i funkcji zawierającej wywołanie
assert(), numer wiersza kodu źródłowego z
wywołaniem i tekst argumentu np.:
prog: some_file.c:16: some_func: Assertion `val == 0' failed.
Jeśli w momencie ostatniego włączenia pliku
<assert.h> było zdefiniowane makro
NDEBUG, to makro
assert() nie generuje żadnego kodu, więc w ogóle
nic nie robi. Nie zaleca się definiowania
NDEBUG przy
używaniu
assert() do wykrywania błędów,
ponieważ oprogramowanie może zachowywać się
nieprzewidywalnie.
Nie jest zwracana żadna wartość.
Informacje o pojęciach używanych w tym rozdziale można
znaleźć w podręczniku
attributes(7).
Interfejs |
Atrybut |
Wartość |
assert() |
Bezpieczeństwo wątkowe |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99.
assert() jest zaimplementowane jako makro. Jeśli testowane
wyrażenie ma jakieś efekty uboczne, zachowanie programu
będzie różne w zależności od tego, czy
zdefiniowano makrodefinicję
NDEBUG. Może to
prowadzić do Heisenbugów [patrz:
http://pl.wikipedia.org/wiki/Heisenbug - przyp.tłum.], które nie
występują przy włączonym odpluskwianiu.
abort(3),
assert_perror(3),
exit(3)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Adam Byrtek <
[email protected]>, Andrzej Krzysztofowicz
<
[email protected]>, Robert Luberda <
[email protected]> i
Michał Kułach <
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]