Condividi tramite


assert (CRT)

Valuta un'espressione e, quando il risultato è false, stampa un messaggio di diagnostica e arresta il programma.

void assert( 
   int expression 
);

Parametri

  • expression
    Espressione (comprendente i puntatori) che restituisce un valore diverso da zero oppure 0.

Note

La macro assert in genere è utilizzata per identificare errori logici per lo sviluppo di programmi mediante l'implementazione dell'argomento di expression per valutare a false solo quando il programma funziona in modo non corretto. Dopo che la fase di debug è stata completata, il controllo delle asserzioni può essere disabilitato senza modificare il file di origine definendo l'identificatore NDEBUG. NDEBUG può essere definito con un'opzione della riga di comando /D o con una direttiva di #define. Se NDEBUG viene definito con #define, la direttiva deve essere inserita prima che ASSERT.H sia incluso.

assert stampa un messaggio di diagnostica quando expression valuta a false (0) e chiama abort per terminare l'esecuzione del programma. Se expression è true, non verrà eseguita alcuna azione. Il messaggio diagnostico include l'espressione non riuscita, il nome del file di origine e il numero di riga in cui l'asserzione non è riuscita.

Il messaggio di diagnostica viene visualizzato in caratteri wide. Pertanto, funzionerà come previsto anche se sono presenti caratteri unicode nell'espressione.

La destinazione dei messaggi di diagnostica dipende dal tipo di applicazione che ha chiamato la routine. Le applicazioni console ricevono sempre il messaggio con stderr. In un'applicazione basata su Windows, assert chiama la funzione di MessageBox per creare una finestra di messaggio per visualizzare il messaggio con un pulsante OK. Quando l'utente fa clic su OK, il programma terminerà immediatamente.

Quando l'applicazione viene collegata a una versione di debug delle librerie di runtime, assert creata una finestra di messaggio con tre pulsanti: Interrompi, Riprova e Ignora. Se l'utente fa clic su Interrompi, il programma terminerà immediatamente. Se l'utente fa clic su Riprova, il debugger viene chiamato e l'utente può eseguire il debug del programma se il debug just-in-time (JIT) è abilitato. Se l'utente fa clic su Ignora, assert continua con la relativa esecuzione normale: creazione di una finestra di messaggio con il pulsante OK. Si noti che facendo clic su Ignore quando si verifica una condizione di errore può verificarsi un "comportamento indefinito."

Per ulteriori informazioni sul debug CRT, consultare CRT Debugging Techniques.

La routine di assert è disponibile sia nella versione di rilascio che nelle versioni di debug delle librerie di runtime del linguaggio C. Sono disponibili anche altre due macro _ASSERT e _ASSERTE, ma valutano solamente le espressioni passate quando _DEBUG è stato definito.

Requisiti

Routine

Intestazione obbligatoria

assert

<assert.h>

Esempio

In questo programma, la funzione analyze_string utilizza la funzione di assert per testare diverse condizioni correlate relativa alla stringa e alla lunghezza. Se una qualsiasi delle condizioni non riesce, il programma stampa un'indicazione del messaggio che causa l'errore.

// 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
}
  

Equivalente .NET Framework

System::Diagnostics::Debug::Assert

Vedere anche

Riferimenti

Gestione degli errori (CRT)

Controllo processo e ambiente

abort

raise

signal

Macro _ASSERT, _ASSERTE

_DEBUG