4 votes

ASSERT est-il redondant ?

ASSERT(pointer);
pointer->x;

Dans ce code, l'ASSERT semble être redondant. Si le pointeur est NULL, pointeur->x échouera de toute façon. Mon argument est-il correct ?

0voto

Adam Liss Points 27815

ASSERT peut également être utilisé pour vérifier les conditions invalides ou illogiques qui peuvent ne pas provoquer de plantage. Voici un exemple terriblement artificiel :

void cpu_hog(int duration)
{
    int start_time = (int) time(NULL);
    int end_time   = start_time + duration;

    ASSERT(end_time > start_time);  /* If this fails, "int" is too small. */

    while ((int) time(NULL) < end_time)
        ;
}

Une petite remarque : la plupart des partisans de ASSERT vous recommande de ne l'utiliser que pour valider les hypothèses que vous faites en écrivant le code (par exemple, un pointeur est non NULL, ou une condition ne peut pas se produire). Il est généralement considéré comme un mauvais idée à utiliser ASSERT pour piéger les erreurs liées à l'utilisateur ou les exceptions qui sont censées se produire (par exemple, disque plein) parce que (1) ASSERT n'existe que dans une version de débogage, et (2) même si vous transformez votre code de débogage en code de production, il se plantera au lieu de gérer la condition de manière élégante.

-1voto

Pavel Radzivilovsky Points 11613

L'ASSERT ne doit pas échouer. Il est là pour arrêter un débogueur sur un point d'arrêt. Cela n'affectera pas la construction d'une version.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X