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 ?

#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
