Traer en el conjunto de macro varadica en g ++ 4.4 tiene una semántica confusa y retorcida. Puede obtener una mejor idea de lo que no está sucediendo al usar g++ -E broken_code.cpp
y ver lo que trae el preprocesador. Hay unas pocas docenas de directivas de preprocesador GNU C que podrían evitar que la declaración ::va_list
se compile como __gnuc_va_list
, que a su vez es de escriba __builtin_va_list
el código de chatarra:
$cat junk.cpp
#include <cstdarg>
void foo(char *f, ...) { va_list va; va_start(va, va); }
int main(void) { foo("", "", ""); return 0; }
$ g++ junk.cpp
$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
compila y enlaces (con advertencias) con la salida correspondiente de g++ -E junk.cpp
ser:
# 40 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 102 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 45 "/usr/include/c++/4.4/cstdarg" 2 3
# 54 "/usr/include/c++/4.4/cstdarg" 3
namespace std __attribute__ ((__visibility__ ("default"))) {
using ::va_list;
}
Tenemos una etiqueta 'telépata-needed'? – Maulrus
@Maulrus: No más, no lo hacemos. (Estaría implícito en casi todas las preguntas de bajo puntaje si lo tuviéramos de verdad ...) –
Hola David Me encontré con el mismo problema en Ubuntu 9.10. Usando GCC 4.4.1 ¿Resolvió esto? Si es así, por favor, ayúdenme. Gracias Vinit –