assert (CRT)
Oblicza wyrażenie i, gdy wynik jest false, drukuje komunikat diagnostyczny i przerywa program.
void assert(
int expression
);
Parametry
- expression
Wyrażenie (w tym wskaźników) ma wartość różną od zera lub równa zero.
Uwagi
assert Makro jest zazwyczaj używany do identyfikowania błędy logiczne podczas opracowywania programu implementując expression argument do oceny do false tylko kiedy program działa niepoprawnie.Po zakończeniu debugowania Sprawdzanie potwierdzenia może zostać wyłączona bez modyfikowania pliku źródłowego, definiując identyfikator NDEBUG.NDEBUGmożna zdefiniować za pomocą /D opcji wiersza polecenia lub z #define dyrektywy.Jeśli NDEBUG jest zdefiniowana z #define, dyrektywa musi pojawić się przed ASSERT.H jest włączone.
assertdrukuje wiadomość diagnostyczne przy expression daje w wyniku false (0) i wywołania przerwać zakończenie wykonywania programu.Jeśli zostanie podjęta żadna akcja expression jest true (niezerowej).Komunikat diagnostyczny zawiera wyrażenie nie powiodło się, nazwa pliku i wiersza numer źródła gdzie potwierdzenie nie powiodło się.
Komunikat diagnostyczny jest drukowany w szerokości znaków.Tak więc będzie działać zgodnie z oczekiwaniami, nawet jeśli występują znaki Unicode w wyrażeniu.
Miejsce docelowe wiadomości diagnostyczne zależy od typu aplikacji, która wywołała rutynowych.Aplikacje konsoli zawsze odbierać wiadomości przez stderr.W aplikacji opartych na systemie Windows assert wymaga systemu Windows MessageBox funkcja służąca do tworzenia okno komunikatu, aby wyświetlić wiadomość wraz z OK przycisk.Kiedy użytkownik kliknie przycisk OK, program przerywa natychmiast.
Gdy aplikacja jest połączona z wersji debug biblioteki run-time assert tworzy okno komunikatu z trzema przyciskami: przerwać, ponowić próbę, i Ignoruj.Jeśli użytkownik kliknie przerwać, program przerywa natychmiast.Jeśli użytkownik kliknie ponowić próbę, nazywa się debugera i użytkownik może rozpocząć debugowanie programu, jeśli jest włączone debugowanie just-in-time (JIT).Jeśli użytkownik kliknie Ignoruj, assert w dalszym ciągu z jego normalnego wykonywania: tworzenie okno komunikatu z OK przycisk.Należy zauważyć, że kliknięcie Ignoruj gdy istnieje warunek błędu może spowodować Niezdefiniowany zachowanie.
Aby uzyskać więcej informacji o debugowaniu CRT, zobacz Technik debugowania CRT.
assert Rutynowych jest dostępny w wersji, jak i debugowe wersje biblioteki run-time C.Dwa pozostałe makra potwierdzenia, _ASSERT i _ASSERTE, są również dostępne, ale tylko ocenić wyrażeń przekazanych do nich, kiedy _DEBUG flaga została zdefiniowana.
Wymagania
Procedura |
Wymagany nagłówek |
---|---|
assert |
<Assert.h> |
Przykład
W tym programie analyze_string funkcja używa assert funkcji, aby przetestować kilka warunków związanych z ciągu i długości.Jeśli dowolny z warunków nie powiedzie się, program drukuje komunikat wskazujący, co było przyczyną niepowodzenia.
// crt_assert.c
// compile with: /c
#include <stdio.h>
#include <assert.h>
#include <string.h>
void analyze_string( char *string ); // Prototype
int main( void )
{
char test1[] = "abc", *test2 = NULL, test3[] = "";
printf ( "Analyzing string '%s'\n", test1 ); fflush( stdout );
analyze_string( test1 );
printf ( "Analyzing string '%s'\n", test2 ); fflush( stdout );
analyze_string( test2 );
printf ( "Analyzing string '%s'\n", test3 ); fflush( stdout );
analyze_string( test3 );
}
// Tests a string to see if it is NULL,
// empty, or longer than 0 characters.
void analyze_string( char * string )
{
assert( string != NULL ); // Cannot be NULL
assert( *string != '\0' ); // Cannot be empty
assert( strlen( string ) > 2 ); // Length must exceed 2
}
Odpowiednik w programie .NET Framework
System::Diagnostics::Debug::Assert