c assert assertion handling c with examples
Ten samouczek dotyczący asercji języka C ++ rzuca światło na stwierdzenia w C ++, które są instrukcjami testującymi założenia programu stworzonego przez programistę:
najlepsze oprogramowanie optymalizacyjne dla systemu Windows 10
W programie w C ++ zwykle zakładamy, że program taki jak indeks tablicy powinien być większy od zera.
Kiedy te założenia się sprawdzą, program działa poprawnie, ale kiedy te założenia staną się fałszywe, program nie kończy się normalnie.
=> Odwiedź tutaj, aby zapoznać się z pełnym kursem C ++ od ekspertów.
Czego się nauczysz:
Asercje w C ++
Assert to instrukcja w C ++, która sprawdza warunek podobny do tego wyjaśnionego powyżej. Jeśli warunek jest spełniony, program działa normalnie, a jeśli warunek jest fałszywy, program jest przerywany i wyświetlany jest komunikat o błędzie.
Możemy dostarczyć asercję za pomocą makra preprocesora assert.
Za pomocą liczby całkowitej myInt możemy zadeklarować asercję mówiącą, że myInt powinno być> 0 w następujący sposób.
assert (myInt > 0);
Załóżmy, że określona wartość myInt to -1, stąd asercja nie powiedzie się, gdy kompilator napotka powyższą instrukcję, ponieważ wartość myInt wynosi -1. Gdy asercja nie powiedzie się, wyświetlany jest komunikat informujący o nieprawidłowym asercji wraz z nazwą programu i numerem linii, a program zostaje zakończony.
Ogólny prototyp asercji jest następujący:
assert (warunek) gdzie warunek => wyrażenie typu skalarnego
Assert to makro preprocesora używane do oceny wyrażenia warunkowego. Jeśli wyrażenie warunkowe ma wartość false, program jest przerywany po wyświetleniu komunikatu o błędzie. Komunikat o błędzie zazwyczaj składa się z błędnego wyrażenia warunkowego, nazwy pliku kodu i numeru wiersza potwierdzenia.
Dzięki temu dowiadujemy się, gdzie wystąpił problem, a także jaki jest problem, który wystąpił w kodzie. Dlatego używanie asercji sprawia, że debugowanie jest bardziej wydajne.
Nagłówek C ++< cassert > zawiera funkcję assert. Najczęściej używamy funkcji assert w kodzie, aby sprawdzić między innymi, czy parametry przekazane do funkcji są prawidłowe, sprawdzić wartość zwracaną przez funkcję lub sprawdzić granice tablicy.
Podstawowy przykład asercji w C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Wynik:

W powyższym programie użyliśmy wywołania assert, które zawiera wyrażenie (myInt! = NULL) w funkcji display_number. W funkcji głównej najpierw przekazujemy zmienną wskaźnikową second_ptr, która zawiera adres zmiennej myptr. Kiedy następuje to wezwanie, potwierdzenie jest prawdziwe. Dlatego wykonywanie programu jest normalne i wyświetlana jest wartość.
W drugim wywołaniu display_number przekazujemy wskaźnik null, dzięki czemu assert jest fałszywy. W ten sposób, gdy wykonywane jest drugie wywołanie, komunikat o błędzie potwierdzenia jest wyświetlany, jak pokazano na wyjściu.
Wyłączanie asercji za pomocą NDEBUG
Kiedy używamy asercji, są one sprawdzane w czasie wykonywania. Asercje sprawiają, że debugowanie jest wydajne, ale należy uważać, aby nie uwzględniać asercji w kompilacji wydania aplikacji. Dzieje się tak, ponieważ wiemy, że wydając aplikację, robimy to tylko wtedy, gdy mamy pewność, że aplikacja została gruntownie przetestowana.
Dlatego musimy wyłączyć wszystkie asercje, kiedy udostępniamy oprogramowanie. Możemy wyłączyć asercje w programie za pomocą makra NDEBUG. Użycie makra NDEBUG w programie wyłącza wszystkie wywołania potwierdzenia.
Możemy dołączyć do programu linię podaną poniżej, aby wyłączyć wszystkie instrukcje assert.
#define NDEBUG
Następujące programy w C ++ pokazują, jak program zachowuje się, gdy NDEBUG jest komentowany, a także gdy NDEBUG jest aktywny.
# 1) NDEBUG podano, ale skomentowano.
#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
'; }
Wynik:
jak otworzyć plik torrent

W tym programie określiliśmy instrukcję #define NDEBUG, ale została ona skomentowana. Oznacza to, że instrukcja assert jest aktywna. Tak więc, gdy program jest wykonywany, drugie wywołanie assert zwraca false, a komunikat o błędzie jest wyświetlany, a program jest przerywany.
# 2) NDEBUG jest aktywny.
#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
'; }
Wynik:

W tym programie odkomentowaliśmy makro NDEBUG. Teraz, gdy wykonujemy program, instrukcje assert nie są już aktywne. Dlatego program kontynuuje swoje normalne wykonywanie nawet wtedy, gdy drugi warunek w instrukcji assert jest fałszywy.
W ten sposób odkomentowując wiersz #define NDEBUG, wyłączyliśmy instrukcje assert w programie.
Assert i static_assert
Twierdzenie, które widzieliśmy do tej pory, jest wykonywane w czasie wykonywania. C ++ obsługuje jeszcze jedną formę potwierdzenia, znaną jako static_assert, i przeprowadza sprawdzanie asercji w czasie kompilacji. Jest obecny od C ++ 11.
Static_assert ma następującą składnię ogólną.
static_assert (bool_constexpr, message)
Tutaj bool_constexpr => c Kontekstowo przekonwertowane stałe wyrażenie typu bool.
Message => Ciąg, który pojawi się jako komunikat o błędzie, jeśli bool_constexpr ma wartość false.
Więc jeśli bool_constexpr zwraca wartość true, program działa normalnie. Jeśli bool_constexpr ma wartość false, zostanie wystawiony błąd kompilatora.
Poniższy program pokazuje użycie static_assert w programie 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
'; }
Wynik:

W powyższym programie dostarczyliśmy static_assert z wyrażeniem i komunikatem. W przypadku niepowodzenia generowany jest błąd kompilatora, jak pokazano w danych wyjściowych.
Często Zadawane Pytania
P 1) Co to jest funkcja Assert w C ++?
Odpowiedź: Assert w C ++ to predefiniowane makro, za pomocą którego możemy przetestować pewne założenia, które są ustawione w programie. Gdy wyrażenie warunkowe w instrukcji assert ma wartość true, program kontynuuje normalną pracę. Ale gdy wyrażenie jest fałszywe, wyświetlany jest komunikat o błędzie i program zostaje zakończony.
Pytanie 2) Co to jest static_assert?
Odpowiedź: Static_assert jest oceniana w czasie kompilacji w porównaniu z instrukcją assert (), która jest oceniana w czasie wykonywania.
Static_assert został włączony do C ++ od C ++ 11 wzwyż. Aby wyświetlić jako argumenty, wyrażenie warunkowe i komunikat. Gdy warunek ma wartość false, generowany jest błąd kompilatora i wyświetlany jest komunikat. Program jest wtedy przerywany.
P # 3) Jaki jest cel makra assert ()?
Odpowiedź: Makro Assert () służy do testowania warunków lub założeń, które nie powinny występować w programie. Na przykład, indeks tablicy powinien zawsze być> 0. Innym założeniem może być 2 + 2 == 3 + 1.
Więc używając assert () możemy przetestować takie założenia i dopóki przyjmują one wartość true, nasz program działa normalnie. Gdy są fałszywe, program jest przerywany.
Wniosek
W tym samouczku widzieliśmy działanie instrukcji assert () w C ++. Instrukcja assert () jest zdefiniowana w nagłówku. Możemy wyłączyć assert za pomocą makra NDEBUG. Programiści powinni uważać, aby asertu nie można było używać w kodzie produkcyjnym, ponieważ oczekuje się, że kod produkcyjny jest dokładnie testowany i wolny od błędów.
Oprócz instrukcji assert () C ++ 11 obsługuje również static_assert (), które są oceniane w czasie kompilacji. Kiedy static_asset () przyjmuje wartość false, generowany jest błąd kompilatora i program zostaje zakończony.
Asercje są sposobem na przetestowanie założeń w programie i poprzez ocenę wyrażeń warunkowych wewnątrz asercji, możemy dokładnie przetestować program, a debugowanie stanie się bardziej wydajne.
=> Sprawdź WSZYSTKIE samouczki C ++ tutaj.
pytania i odpowiedzi na rozmowę z analitykami systemów biznesowych
rekomendowane lektury
- C # samouczek obsługi wyjątków z przykładami kodu
- Przykłady twierdzeń o selenie - praktyczne zastosowania w projektach
- Struktura programu C # i podstawowa składnia z przykładami
- Python DateTime Tutorial z przykładami
- Polecenie Cut w systemie Unix z przykładami
- Składnia poleceń Unix Cat, opcje z przykładami
- Wykorzystanie kursora w MongoDB z przykładami
- Polecenie Ls w systemie Unix z przykładami