Para los depuradores, usualmente utilizo Clang, ya que formatea mejor las advertencias y los errores, y hace que sea un poco más fácil rastrearlos y solucionarlos.¿Las macros variables no son estándar?
Pero recientemente después de la adición de una macro con argumentos variadic, Clang me dijo lo siguiente (a partir de un proyecto ficticio):
main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
#define stuff3(args...) stuff_i(args)
sé que macroname(args...)
compila bien en una amplia gama de compiladores, incluyendo VisualStudio, SunStudio y, por supuesto, GCC. Pero sólo para asegurarse de que sonido metálico que es correcto, he intentado otras dos formas de ampliar los argumentos variadic:
Número 1:
#define stuff1(...) stuff_i(...)
Número 2:
#define stuff2(...) stuff_i(__VA_ARGS__)
A ambos recibo este mensaje:
main.cpp:3:16: warning: variadic macros were introduced in C99 [-Wvariadic-macros]
... ¿Qué hace que me pregunte si macros variadic son en realidad parte del estándar de C++ (una nd, por supuesto, sé que el preprocesador se interpreta de forma independiente)?
C99 y C++ 0x apoyan oficialmente la versión 2. C++ 03 no admite ninguna macro variadic.La versión 1 es una extensión específica de GCC – sellibitze
(como su nombre) cuando compila con GCC existe la opción '-pedantic' que debe informar de las extensiones utilizadas. Como la matriz de longitud variable o las macros variadas, por ejemplo. En GCC se incluyen simplemente porque como son parte de C99, la lógica ya está implementada, por lo que debe haber parecido una buena idea dejar que el beneficio popular de C++ :) –
@Matthieu M: Sí, de hecho, también pensé que esta característica sería parte de C++, ya que es parte de C99 ... curiosamente, gcc no dice que las macros variadic denominadas son de hecho una extensión de GNU, sino que simplemente dice que no son parte del estándar: 'warning: ISO C no permite macros variadas con nombre' –