El siguiente código C++ compila y funciona como el programador previsto en GCC (4.0.4)macros del preprocesador como parámetros a otras macros
#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7
int main()
{
return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
Sin embargo, las macros provocan un error en Microsoft Visual C++ Express 2010:
main.cpp (7): C4003 advertencia: no suficientes parámetros reales para la macro 'FOO'
main.cpp (7): error C2059: error de sintaxis: ')'
El problema parece ser que el compilador de Microsoft, mientras maneja la macro BAR internamente, no expande la macro BAZ a parámetros que podrían usarse como dos parámetros separados para macro FOO.
De acuerdo con la norma, ¿qué compilador maneja la situación correctamente?
Parece que lo que realmente está buscando es [macros variadas] (http://en.wikipedia.org/wiki/Variadic_macro). – leftaroundabout
@leftaroundabout no parece que él es ... –
@iammilind: ¿Qué falta en el capítulo 16 de la norma? ¿Cómo no es un estándar "real"? –