ASSERT(3) Linux Programmer's Manual ASSERT(3)
NAME
assert - abort the program if assertion is false
SYNOPSIS
#include <assert.h>
void assert(scalar expression);
DESCRIPTION
If the macro NDEBUG was defined at the moment <assert.h> was last included, the macro
assert() generates no code, and hence does nothing at all.
Zerosquare (./30) :
Pareil. Mais c'est pas très utilisable pour une appli finalisée, surtout si les utilisateurs sont pas des codeurs.
MAY_ASSERT(n >= 2);
for(int i = 0; i < n ; i++) { ... }
)
. Car sans goto on aurait pas de if (ben oui on ferait comment pour sauter a travers la portion de code ? hein ?)

tst.w d0 beq.s \Valid bmi ErrorFileCorrupted subq.w #1,d0 beq ErrorFileNotFound bra ErrorWrongFileType

GT Turbo (./35) :Je crois que tout le monde l'est ici
les 68000 eurs comprendront.


)Folco (./41) :
PpHd -> ta macro ASSUME, elle ressemble à ça ? https://freedesktop.org/patch/34398/
Folco (./41) :
(et c'est quoi ce have_builtin_unreachable au passage ? yen a qui s'éclatent avec le préproc, c'est fou ça)
if (n <= 2)
__builtin_unreachable ();
for(i = 0 ; i < 2; i++)
)#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; \
} 
#define CHECK(condition, label, ...) \
if (!(condition)) { \
fprintf(stderr, "%s, %s, %i\n", __FILE__, __func__, __LINE__); \
fprintf(stderr, ##__VA_ARGS__, ""); \
goto label; \
}Ou bien c'est le ##__VA_ARGS__ qui te gêne ? Si tu veux éviter le fprintf(stderr, ""), tu peux ajouter if (*#__VA_ARGS__) devant...
#include <stdio.h>
#include <stdbool.h>
#define CHECK(condition, label, ...) \
if (!(condition)) { \
fprintf(stderr, "%s, %s, %i\n", __FILE__, __func__, __LINE__); \
fprintf(stderr, ##__VA_ARGS__, ""); \
goto label; \
}
int main (int argc, char** argv)
{
CHECK (false, pouet, "pwic\n")
pouet:
return 1;
}
Pour moi, ça "stringifiais" des symboles, ça les concaténait, puis ça les déstringifiait pour en refaire un symbole, comme ici : https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html#Concatenation
flanker (./54) :
Et ensuite, tu chercheras des problèmes à tes solutions


#define CHECK(condition, label, fmt, ...) \
if (!(condition)) { \
fprintf(stderr, "%s, %s, %i\n", __FILE__, __func__, __LINE__); \
fprintf(stderr, fmt, ##__VA_ARGS__); \
goto label; \
}Folco (./55) :
=> En fait, je ne vois pas du tout l'intérêt du ## ici, j'ai l'impression que j'ai la meme sortie en passant directement __VA_ARGS__



