2009-05-20 9 views

Répondre

16

Il définit l'expression assert (quoi que ce soit) pour ne rien faire.

Vraisemblablement, l'environnement utilisé ne prend pas en charge l'instruction ANSI C assert, ou le programmeur ignorait qu'il pouvait être désactivé en définissant NDEBUG.

+6

Ou le code était dans assert.h –

8

Pour développer ce bdonlan dit, la raison pour laquelle la macro ne se dilate pas vide est parce que si elle l'a fait, alors quelque chose comme:

assert(something) // oops, missed the semi-colon 
assert(another_thing); 

serait compiler en mode de sortie mais pas en mode de débogage. La raison pour laquelle c'est ((void) 0) plutôt que simplement 0 est d'empêcher les avertissements "sans déclaration" (ou tout ce que MSVC les appelle).

0

Juste pour ajouter, c'est la définition de assert dans newlib aussi, quand NDEBUG est défini comme une directive préprocesseur. Newlib est la bibliothèque C open source utilisée sur les systèmes embarqués Cygwin.

De l'assert manuel newlib:

La macro est définie pour vous permettre de désactiver toutes les utilisations de assert à compilation en définissant NDEBUG comme une variable de préprocesseur. Si vous faites cela, le assert macro se développe pour (void(0))