使用变量参数时 GCC 编译错误
Compile error with GCC when using variable arguments
我有一个使用可变参数的函数,看起来像这样:
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 和 "older" 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);
有人知道这里出了什么问题吗?为什么 GCC 抱怨?
谢谢!
始终按值传递 va_list
,从不按指针传递。
因此:
static int getIntValue(const int min, const int max, va_list vl)
和
initValues.uiFlags=getIntValue(INT_MIN, INT_MAX, vl);
我有一个使用可变参数的函数,看起来像这样:
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 和 "older" 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);
有人知道这里出了什么问题吗?为什么 GCC 抱怨?
谢谢!
始终按值传递 va_list
,从不按指针传递。
因此:
static int getIntValue(const int min, const int max, va_list vl)
和
initValues.uiFlags=getIntValue(INT_MIN, INT_MAX, vl);