Non, mais assert est prévu pour ... les assertions (détecter les erreurs de conceptions/programmations en phase de dev), c'est pourquoi si tu (ou un autre) recompiles le programme en définissant NDEBUG tous tes assert ne feront plus rien (pas bien).
Un malloc qui plante n'est pas (toujours
) une erreur de programmation, mais une erreur runtime qui doit être traitée par ton propre handler au runtime.
Il n'est pas interdit d'utiliser assert comme tu fais, c'est très fortement non recommandé (après tout le monde est libre).
Il est tout aussi facile de se faire une macro/fonction utilisant un fprintf(stderr,...), __FILE__ __LINE__ sont standards __FUNC__ / __FUNCTION__ __PRETTYFUNCTION__ existent mais doivent dépendre d'une implémentation particulière je crois. *cf edit2
EDIT: j'y vais un peu fort avec les asserts car on peut évidemment les laisser en release ... mais cela peut créer de la confusion pour d'autres personnes qui reliraient ou maintiendraient ton code. Un des réflexes est souvent : on enlève les assert, le code sera un peu plus rapide et c'est pas grave car on a confiance au code qui a été testé ...
EDIT2: en fait c99 définit la macro __func__, gcc propose aussi __FUNCTION__ qui est l'identifiant de la fonction et __PRETTY_FUNCTION__ qui est la signature de la fonction.
EDIT3: jette un coup d'oeil sur <err.h> dans la gnulibc :
http://www.gnu.org/software/libc/man...-Messages.html
Partager