Partager via


assert (CRT)

Évalue une expression et, quand le résultat est false, envoie un message de diagnostic et interrompt le programme.

void assert( 
   int expression 
);

Paramètres

  • expression
    Expression (pointeurs compris) qui s'évalue à une valeur non nulle ou 0.

Notes

La macro assert est généralement utilisée pour identifier les problèmes de logique lors du développement de programmes en implémentant l'argument expression pour évaluer à false uniquement lorsque le programme ne fonctionne pas correctement. Une fois que le débogage terminé, la vérification d'assertion peut être arrêtée sans modifier le fichier source en définissant l'identificateur NDEBUG. NDEBUG peut être défini avec une option de ligne de commande /D ou avec la directive #define. Si NDEBUG est défini avec #define, la directive doit apparaître avant que ASSERT.H soit inclus.

assert envoie un message de diagnostic lorsque expression est évalué à false (0) et appelle arrêt pour terminer l'exécution du programme. Aucune mesure n'est prise si expression est true (non zéro). Le message de diagnostic contient l'expression qui a échoué, le nom du fichier source et le numéro de ligne où l'assertion a échoué.

Le message de diagnostic est imprimé en caractères larges. Ainsi, la procédure fonctionne comme prévu même s'il existe des caractères Unicode dans l'expression.

La destination du message de diagnostic dépend du type d'application qui a appelé la routine. Les applications console reçoivent toujours le message via stderr. Dans une application Windows, assert appelle la fonction windows Pack pour créer une boîte de message pour afficher le message avec un bouton OK. Lorsque l'utilisateur clique sur OK, le programme s'interrompt immédiatement.

Lorsque l'application est liée à une version de débogage des bibliothèques Runtime, assert crée un message avec trois boutons : Abandonner, Réessayer, et Ignorer. Si l'utilisateur clique sur Abandonner, le programme s'interrompt immédiatement. Si l'utilisateur clique sur Réessayer, le débogueur est appelé et l'utilisateur peut déboguer le programme si le débogage juste-à-temps de (JIT) est activé. Si l'utilisateur clique sur Ignorer, assert poursuit son exécution normale : créer le message avec le bouton OK. Notez qu'un clic sur Ignorer lorsqu'une condition d'erreur existe peut induire un comportement non défini.

Pour plus d'informations sur le débogage CRT, consultez CRT Debugging Techniques.

La routine assert est disponible dans les versions normale et de débogage des bibliothèques runtime C. Deux autres macros d'assertion, _ASSERT et _ASSERTE, sont également disponibles, mais elles renvoient uniquement les expressions qui leur sont passées si l'indicateur _DEBUG a été défini.

Configuration requise

Routine

En-tête requis

assert

<assert.h>

Exemple

Dans ce programme, la fonction analyze_string utilise la fonction assert pour tester plusieurs conditions liées à la chaîne et à la longueur. Si l'une des conditions échoue, le programme envoie un message indiquant ce qui a provoqué l'erreur.

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

Équivalent .NET Framework

System::Diagnostics::Debug::Assert

Voir aussi

Référence

Gestion des erreurs (CRT)

Contrôle de processus et d'environnement

abort

raise

signal

_ASSERT, _ASSERTE, macros

_DEBUG