Potwierdzanie i komunikaty dostarczone przez użytkownika (C++)
Język C++ obsługuje trzy mechanizmy obsługi błędów, które są pomocne podczas debugowania aplikacji: dyrektywa #error, słowo kluczowe static_assert i makro assert (CRT).Wszystkie trzy mechanizmy emitują komunikaty o błędach a dwa testują również potwierdzenia oprogramowania.Potwierdzenie oprogramowania określa warunek, którego spełnienia można oczekiwać w określonym punkcie programu.Jeśli potwierdzenia w czasie kompilacji zakończą się niepowodzeniem, kompilator generuje komunikat diagnostyczny i błąd kompilacji.Jeśli potwierdzenia czasu wykonania nie powiodą się, system operacyjny wystawia komunikat diagnostyczny i zamyka aplikację.
Uwagi
Okres istnienia aplikacji składa się z wstępnego przetwarzania, kompilacji i fazy czasu wykonywania.Każdy mechanizm obsługi błędów uzyskuje dostęp do informacji debugowania, które są dostępne w jednej z tych faz.Aby debugować skutecznie, wybierz ten mechanizm, który zapewnia odpowiednie informacje na temat tej fazy:
Dyrektywa #error jest aktywna w czasie wstępnego przetwarzania.Bezwarunkowo emituje komunikat określony przez użytkownika i powoduje niepowodzenie z powodu błędu kompilacji.Wiadomość może zawierać tekst, który jest przetwarzany przez dyrektywy preprocesora, ale nie jest oszacowane żadne wyrażenie warunkowe.
Deklaracja static_assert obowiązuje w czasie kompilacji.Sprawdza potwierdzenia oprogramowania, które są reprezentowane przez wyrażenia integralne określone przez użytkownika, które można przekonwertować na wartość logiczną.Jeśli wyrażenie ma wartość zero (false), kompilator generuje komunikat określony przez użytkownika i kompilacja nie powiedzie się z powodu błędu.
Deklaracja static_assert jest szczególnie przydatna podczas debugowania szablonów, ponieważ argumenty szablonu mogą być zawarte w wyrażeniu określonym przez użytkownika.
Makro assert (CRT) obowiązuje w czasie wykonywania.Ocenia wyrażenia określone przez użytkownika, a jeśli wynik wynosi zero, system wystawia komunikat diagnostyczny i zamyka aplikacje.Wiele innych makr, takich jak_ASSERT i _ASSERTE, przypominają to makro, ale emitują różne komunikaty diagnostyczne zdefiniowane przez system lub przez użytkownika.