44Fermer46
deleted2Le 11/11/2014 à 01:09
Bon, j'ai écrit cette macro :#define CHECK(condition, label, ...) \ if (!(condition)) { \ fprintf (stderr, "%s, %s, %i\n", __FILE__, __func__, __LINE__); \ #if #__VA_ARGS__ != "" \ fprintf(stderr, __VA_ARGS__); \ #endif /* #__VA_ARGS == "" */ \ goto label; \ }
Elle permet de vérifier un peu comme assert, mais accepte un label où sauter si ça foire, et des arguments à un fprintf (optionnel).

Problème : pas le droit de mettres de #if dans un #define, donc si quelqu'un sait comment contourner ça, ça serait cool...
Au pire, faire un fprintf (""), c'est pas encore trop grave, c'est juste très con. Malheureusement, le préproc C ne supporte pas de ne pas donner d'arguments quand on utilise __VA_ARGS__. C'est faisable en C++ par contre.

Et je veux que ce soit optionnel, parce que ma politique consiste à faire écrire un message sur stdout au moment où l'erreur est levée, et toutes les fonctions appelantes se contentent de constater l'erreur, faire un cleanup et retourner sans rien ajouter. Donc ça permetrait d'utiliser la meme macro partout.

ps -> je sais meme pas si #__VA_ARGS == "" marche, j'ai pas essayé, on verra ça demain grin
ps2 -> ah ben en fait ça marche pas de comparer des strings. sizeof ne marche pas. _Static_assert sait faire, mais renvoie une erreur ><
vous voyez un moyen ?