84Fermer86
RHJPPLe 12/11/2014 à 19:42
Folco (./75) :
Par contre, je dois passer -Wno-format-extra-args pour éviter un warning, dans le cas où je fournis une chaine avec des donénes à formatter, genre IF_TRUE (m_count == GS_COUNT_MAX, Exit, "ERROR: max game state reached, %i", GS_COUNT_MAX), parce qu'il n'y a que %i à formater, et gcc voit GS_COUNT_MAX et le "" de la macro. J'ai pas trouvé comment éviter ça (sans utiliser une lib telle celle proposée par PpHd).

Pourquoi ne pas continuer avec le bricolage ? grin#define SP_FPRINTF(file, format, ...) \ if (*#__VA_ARGS__) { \ const char *f = format; \ size_t l = strlen(f); \ char f2[l + 3]; \ strcpy (f2, f); \ strcpy (f2 + l, "%s"); \ fprintf (file, f2, ##__VA_ARGS__); \ } else { \ fprintf (file, format); \ } #define IF_TRUE(condition, label, ...) \ if (condition) { \ if (*#__VA_ARGS__) { \ fprintf (stderr, "ERROR: "); \ SP_FPRINTF (stderr, ##__VA_ARGS__, "\n"); \ } \ fprintf (stderr, "TRACE: %s:%i, in %s()\n", __FILE__, __LINE__, __func__); \ goto label; \ } #define IF_FALSE(condition, label, ...) IF_TRUE (!(condition), label, ##__VA_ARGS__)

J'ai fait une marco, mais tu peux faire pareil en fonctionnel wink