Pourquoi cela ne compile sur VC 2005?Passant fonction multi-param dans une macro
bool isTrue(bool, bool) { return true; }
void foo();
#define DO_IF(condition, ...) if (condition) foo(__VA_ARGS__);
void run()
{
DO_IF(isTrue(true, true)); // error C2143: syntax error : missing ')' before 'constant'
}
En l'utilisant les sorties seul préprocesseur:
bool isTrue(bool, bool) { return true; }
void foo();
void run()
{
if (isTrue(true true)) foo();;
}
Notez la virgule manquante dans la ligne avant-dernier.
Dernière édition:
LOL!
bool isTrue(bool, bool) { return true; }
void foo();
#define DO_IF(condition, ...) if (condition) { foo(__VA_ARGS__); }
void run()
{
DO_IF(isTrue(true ,, true)); // ROTFL - This Compiles :)
}
Doit être bug préprocesseur. CPP ne devrait pas jouer avec le paramètre macro. – qrdl
Cela ressemble à un bogue de préprocesseur. D'ici: http: //msdn.microsoft.com/en-us/library/ms177415 (VS.80) .aspx "La norme C spécifie qu'au moins un argument doit être passé à l'ellipse, à assurez-vous que la macro ne se résout pas en une expression avec une virgule de fin. " Par conséquent, au lieu d'émettre une erreur, l'entrée est affectée (vrai vrai). –
Microsoft est incorrect. Pour manger une virgule flottante, il suffit d'utiliser ## __ VAR_ARGS__, donc vous ne pouvez pas fournir de params, du moins selon les documents du GCC: http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html – qrdl