Verwendung habe ich eine Funktion, die mit variablen Argumenten arbeitet und sieht wie folgt aus:Compile Fehler mit GCC, wenn variable Argumente
static int getIntValue(const int min,const int max,va_list *vl)
{
int listValue;
listValue=va_arg(*vl,int);
if (listValue<min) listValue=min;
else if (listValue>max) listValue=max;
return listValue;
}
unsigned long init_if_list(int *var,va_list vl)
{
char *listTag;
listTag=va_arg(vl,char*);
if (!strcmp(listTag,INIT_SHOWUI)) initValues.uiFlags=getIntValue(INT_MIN,INT_MAX,&vl);
Dieser Code kompiliert gut mit Windows/Visual Studio 2012 und „älteren“ GCC-Versionen (wie 4.7 auf CentOS 6). Aber es schlägt fehl, wenn ich versuche, es mit GCC 4.8.4/Ubuntu zu kompilieren. Hier bekomme ich folgenden Fehler:
error: cannot convert '__va_list_tag**' to '__va_list_tag (*)[1]' for argument '3' to 'int getIntValue(int, int, __va_list_tag (*)[1])'
if (!strcmp(listTag,INIT_SHOWUI)) initValues.uiFlags=getIntValue(INT_MIN,INT_MAX,&vl);
Irgendjemand eine Idee was ist hier falsch? Warum klagen die GCC?
Danke!
Es ist 2016. Warum die varargs? –
Übergeben Sie das Argument 'va_list' nicht als Zeiger? Wenn Sie sich die Fehlermeldung genauer ansehen, sehen Sie, dass es bereits * ein Zeiger ist, dh es ist Typ-Alias ('typedef ') für' __va_list_tag * ', so dass Sie Zeiger nicht verwenden müssen, um Vorbeigehen zu emulieren -Referenz. –
Leichtigkeit im Orbit: Da DLL-Interfaces immer noch einfach sein müssen, sind C++ - Interfaces abhängig von der genauen Version des Compilers. – Elmi