Obtuve la siguiente implementación para obtener el número de argumentos en una macro variable (actualmente limitada a 16 args). Sin embargo, para VS2010, la salida siempre es 1
, independientemente de cuántos argumentos se pasen. With GCC, la salida es correcta, lo que me lleva a la conclusión de que debo haber olvidado algo específico para MSVC (10).¿Por qué falla esta macro de recuento de argumentos variados con VC++?
#define PP_NARGS(...) \
_xPP_NARGS_IMPL(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
#define _xPP_NARGS_IMPL(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,N,...) N
int main(){
int i = PP_NARGS(A,V,C,X,Y,Z);
std::cout << i;
std::cin.get();
return 0;
}
Entonces, la pregunta es como dice el título, cualquier ayuda sería apreciada.
¡Omg, * does * work! ¡Increíble! ¿Tienes una explicación de por qué? – Xeo
Me alegro de poder ayudar :-) Honestamente, no puedo explicar por qué (Doh). Como escribí en la respuesta, creo que su macro está bien en el estándar C99. Interpreto el material 'EXPAND' como una solución pura y alternativa, y probablemente allí no contenga ninguna cuestión técnica interesante ... De acuerdo con [aquí] (http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement), esto parece ser el comportamiento de error de VC. –
Muchas gracias por esta solución. Funciona como se describe en VS14 CTP3 (donde un error, reconocido por MS en 2008 [ver el enlace de Ise], todavía está presente). –