使用变量参数时,使用GCC编译错误

时间:2016-04-17 15:27:31

标签: c gcc variadic-functions gcc4.8

我有一个适用于变量参数的函数,如下所示:

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);

此代码适用于Windows / VisualStudio 2012和“较旧”的GCC版本(如CentOS 6上的4.7)。但是当我尝试用GCC 4.8.4 / Ubuntu编译它时,它失败了。我在这里得到以下错误:

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);

有人知道这里有什么问题吗?为什么海湾合作委员会抱怨?

谢谢!

1 个答案:

答案 0 :(得分:1)

始终按值传递va_list,而不是按指针传递。

因此:

static int getIntValue(const int min, const int max, va_list vl)

initValues.uiFlags=getIntValue(INT_MIN, INT_MAX, vl);